通过 htaccess 将所有 http 和 https 非 www URL 重定向到 https://www.xyz.com
Posted
技术标签:
【中文标题】通过 htaccess 将所有 http 和 https 非 www URL 重定向到 https://www.xyz.com【英文标题】:Redirect all http AND https non-www URLS to https://www.xyz.com via htaccess 【发布时间】:2013-07-12 09:28:44 【问题描述】:由于太长和太复杂而无法进入(它涉及多层公司繁文缛节,导致其他人没有购买我请求的通配符 SSL 证书),我必须设置一个域以将所有请求重定向到 @987654321 @ – 带有www
子域的安全协议。
所以:http://xyz.com、http://www.xyz.com 和 https://xyz.com 应该都重定向到 https://www.xyz.com。
我的 .htaccess-fu 充其量是很弱的,我似乎无法让它工作。注意:如果有影响的话,托管在 Media Temple 上。
到目前为止,我的 .htaccess 文件如下所示:
RewriteEngine On
RewriteCond %HTTPS !^on$
RewriteRule (.*) https://www.xyz.com/$1 [R,L]
RewriteCond %HTTP_HOST !^www\.
RewriteRule ^(.*)$ http://www.%HTTP_HOST/$1 [R=301,L]
http://xyz.com 和 http://www.xyz.com 都重定向到 https://www.xyz.com,所以是的。但是,https://xyz.com没有重定向到https://www.xyz.com,因此会抛出一个安全警告页面:
这可能不是您要查找的网站! 您试图访问 xyz.com,但实际上您访问了一个标识为 www.xyz.com 的服务器。这可能是由于服务器上的错误配置或更严重的原因造成的。您网络上的攻击者可能正试图让您访问 xyz.com 的虚假(并且可能有害)版本。 您不应该继续,特别是如果您以前从未见过此站点的此警告。
任何帮助我度过这最后一个难关的帮助将不胜感激!
【问题讨论】:
【参考方案1】:我真的不明白 @scottie 链接说不可能是公认的答案。
我在我的 3 个网站上使用以下代码,provided here by Erik 并且它成功地使 http://example.com, http://www.example.com, https://example.com 全部登陆https://www.example.com
RewriteEngine On
# ensure www.
RewriteCond %HTTP_HOST !^www\. [NC]
RewriteRule ^ https://www.%HTTP_HOST%REQUEST_URI [L,R=301]
# ensure https
RewriteCond %HTTP:X-Forwarded-Proto !https
RewriteCond %HTTPS off
RewriteRule ^ https://%HTTP_HOST%REQUEST_URI [L,R=301]
P.S:我必须#RewriteEngine On
,因为我的.htaccess
开头已经有RewriteEngine On
我希望这也能帮助像我这样可能认为这是一个非常漫长的过程的人,如果有任何我不知道的缺点,请告诉我。
【讨论】:
【参考方案2】:尽管这个问题已经很老了。
如果发现它在谷歌上搜索完全相同的问题。在此处提供的代码没有帮助之后。我试过了。
这个对我有用:
RewriteCond %HTTPS off
RewriteCond %HTTP_HOST ^www\.(.+)$ [NC]
RewriteRule .* https://%1%REQUEST_URI [R=301,L]
RewriteCond %HTTPS off
RewriteCond %HTTP_HOST !^www\. [NC]
RewriteRule .* https://%HTTP_HOST%REQUEST_URI [R=301,L]
RewriteCond %HTTPS on
RewriteCond %HTTP_HOST ^www\.(.+)$ [NC]
RewriteRule .* https://%1%REQUEST_URI [R=301,L]
为我解决了这个问题,没有任何循环或其他错误。也许它会帮助别人。
【讨论】:
这个解决方案在尝试了许多项目大约 20 分钟后已经奏效,它并不完美,但其他一切都将非 http 定向到 www.example.com 我无法弄清楚!【参考方案3】:这很有可能。使用以下代码。这对我有用。
RewriteCond %HTTP_HOST !^www\.
RewriteRule ^(.*)$ https://www.%HTTP_HOST%REQUEST_URI$1 [R=301,L]
RewriteCond %HTTPS off
RewriteRule ^(.*)$ https://%HTTP_HOST%REQUEST_URI$1
【讨论】:
这对我不起作用,因为我没有根据 Scottie 的回答为 www.mydomain.com 和 mydomain.com 启用证书。【参考方案4】:万一未来的任何人(你好未来的人)偶然发现这个问题,我问了同样的问题,并在服务器故障处得到了回答。
短版:不可能。
长版:https://serverfault.com/questions/523199/redirect-all-http-and-https-non-www-urls-to-https-www-example-com-via-htaccess
【讨论】:
以上是关于通过 htaccess 将所有 http 和 https 非 www URL 重定向到 https://www.xyz.com的主要内容,如果未能解决你的问题,请参考以下文章
通过 .htaccess 文件为所有 PHP 脚本设置 HTTP 标头