在.htaccess

时间:2016-08-16 19:32:07

标签: apache .htaccess https

我在这个页面.htaccess - how to force "www." in a generic way?开始阅读类似的主题并且解决方案不是,几乎就是我想要做的。

问题:我需要用户使用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,或者是否有最佳做法可以获得我想要的结果?

谢谢。

1 个答案:

答案 0 :(得分:3)

您收到此行为是因为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]