强制SSL,WWW并删除index.php htaccess

时间:2014-05-02 17:00:37

标签: .htaccess mod-rewrite ssl

如何使用htaccess实现所有这些目标。到目前为止,我有 -

强制执行SSL

RewriteCond %{HTTPS} !on [OR]

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]

RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301]

并删除index.php

RewriteCond %{THE_REQUEST} ^.*/index.php

RewriteRule ^(.*)index.php$ https://www.example.com/$1 [R=301,L]

它似乎在大多数情况下起作用但是当我输入类似“example.com/index.php”之类的东西时,我收到错误。它被重定向到

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

我知道为什么会发生这种情况,但无法找出合并我需要的所有内容并使其发挥作用的规则。

1 个答案:

答案 0 :(得分:0)

要猜测,您在第一条规则中错过了L标记:

RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]

如果没有L标志,请求会被标记为"重定向"但继续处理其他规则。根据您所看到的结果,看起来这两条规则相互干扰。


  

但是当我输入example.com/index.php

时,有没有办法减少重定向

不确定这是否有效,因为我无法测试,但也许是这样的?

RewriteCond %{THE_REQUEST} ^.*/index.php [OR]
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^(.*?)(index\.php)?$ https://www.example.com/$1 [R=301,L]