如何使用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/
我知道为什么会发生这种情况,但无法找出合并我需要的所有内容并使其发挥作用的规则。
答案 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]