2016-03-03 64 views
2
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L] 

我试图强制所有内容到https并消除www。我知道这已经被反复讨论 - 但我试图理解为什么这个版本 - 特别是 - 不起作用。当我将上面的代码添加到htaccess时,强制https的效果很好 - 但它不会删除www。鉴于我在重写过程中使用的显式url,这甚至是可能的?我试过删除缓存,不同的浏览器,不同的机器等等。服务器级可以有其他的东西来覆盖它吗? TX重定向无法删除www

+0

“这怎么可能” - 您是否暗示即使访问“http:// www.example.com”(注意HTTP),它仍然不会删除“www”?如果你访问'https:// www.example.com'(用'''),那么因为你的'RewriteRule'只能在端口80访问时被处理,所以什么都不会发生。 – MrWhite

+1

好吧,你碰到它的时候,我没有意识到80港口的含义 - 在这方面显而易见 - 因此根据您的期望,您的第一个例子确实奏效 - 但是一旦我看到https工作,我只关注www部分。我感谢你的明确回应。 – busy1

回答

1

您可以使用此规则做两件事,即http->httpsremove www

RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP_HOST} ^www\. [NC] 
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] 
RewriteRule^https://%1%{REQUEST_URI} [R=302,L,NE] 

请务必保留此规则的第一条规则和清除浏览器缓存。

+0

欣赏这一点,我会尽快尝试并回复... – busy1

+1

虽然w3dk在技术上回答了我的问题,关于为什么我的代码没有按预期工作,这是我的原始代码更好的(也是更便携的)替代方案,运作良好,是我可以投票的唯一答案 - 再次感谢您的帮助 – busy1