2016-08-16 86 views
0

我开始阅读有关此页.htaccess - how to force "www." in a generic way?上的类似主题,该解决方案并非如此,几乎我正在寻找的。在.htaccess中强制HTTPS和WWW

问题:我需要用户使用HTTPS和WWW来使我的应用程序正常工作。但是,如果像HTML链接上一些点击:

<a href="https://www.example.com">www.example.com</a> 

用户将落在我的网站是:

https://www.www.example.com/ 

这是我目前的.htaccess文件。

<IfModule mod_rewrite.c> 

RewriteEngine on 

RewriteCond %{HTTP_HOST} !^www\. 

RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L] 

RewriteCond %{HTTPS} !=on 

RewriteRule ^/?(.*) https://www.%{SERVER_NAME}/$1 [R=301,L] 

</IfModule> 

有什么方法来检测用户已经进入了WWW还是有让我期待的结果的最佳实践?

谢谢。

+0

如果要强制使用HTTPS,你应该使用HSTS了。它确实更安全(例如,它可以防止sslstrip)。仔细阅读文档。 – Tom

回答

1

您会收到此行为,因为http -> https规则会在目标网址中添加www\.而不检查网址是否已经以www开头。

你应该对单个规则,并作为奖金更换您的两个规则,避免多次重定向:

RewriteEngine On 

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