通过htaccess将所有http和https非www URL重定向到https://www.xyz.com

时间:2013-07-14 10:35:59

标签: .htaccess http redirect https

由于太长而且复杂的原因(它涉及多层公司繁文缛节导致其他人没有购买我要求的通配符SSL证书),我必须设置一个域来将所有请求重定向到{{ 3}} - 使用www子域的安全协议。

所以:https://www.xyz.comhttp://xyz.comhttp://www.xyz.com应该全部重定向到https://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]

https://www.xyz.comhttp://xyz.com都重定向到http://www.xyz.com,所以是的。但是,https://www.xyz.com 重定向到https://xyz.com,因此会抛出安全警告页面:

  

这可能不是您要找的网站!
  您尝试访问 xyz.com ,但实际上您已经到达了一个服务器,将自己标识为 www.xyz.com 。这可能是由服务器上的配置错误或更严重的问题引起的。您网络上的攻击者可能会试图让您访问 xyz.com 的假(且可能有害)版本。
  您不应该继续,特别是如果您之前从未在此网站上看到此警告。

让我超越这一个最后一个驼峰的任何帮助都将非常感激!

4 个答案:

答案 0 :(得分:9)

这是非常可能的。使用以下代码。这适合我。

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

答案 1 :(得分:5)

如果未来的任何人(HELLO PEOPLE OF THE FUTURE)偶然发现了这个问题,我会问同样的问题并在服务器故障中得到解答。

短版:不可能。

长版:https://serverfault.com/questions/523199/redirect-all-http-and-https-non-www-urls-to-https-www-example-com-via-htaccess

答案 2 :(得分:3)

即使这个问题很老。

如果发现它完全相同的问题。在此处提供的代码之后没有帮助。我试过了。

这个对我有用:

     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]

修复了没有任何循环或其他错误的问题。也许它会帮助别人。

答案 3 :(得分:0)

我真不明白@scottie链接说“不可能”是被接受的答案。

我在我的3个网站(provided hereErik)上使用以下代码,它成功使 http://example.comhttp://www.example.comhttps://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]

PS:我必须#RewriteEngine On,因为我RewriteEngine On的开头已经有了.htaccess

我希望这也能帮助像我这样的人,他们可能认为这是一个漫长的过程,如果有什么缺点我不知道,请告诉我。