通过 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 .htaccess重定向

通过 .htaccess 文件为所有 PHP 脚本设置 HTTP 标头

Apache .htaccess 重定向删除表单数据

htaccess:将所有域(https和http)重定向到新域

通过 httpd.conf / htaccess 重定向目录中除一个文件之外的所有文件