0

我目前正在尝试在我网站的 /sub/ 文件夹中的 .htaccess 文件中使用两个重写规则。一种是重定向以删除 url 末尾的 index.php、index.html 等,例如 /sub/index.php -> /sub/:

RewriteCond %{REQUEST_URI} ^(.*)/index\.[^\.]+$
RewriteRule index.* %1/ [r=301,L]

另一种是重写 php 的 url 以获取查询字符串 eg /sub/testing-testing -> /sub/index.php?field=testing-testing:

RewriteRule ^(.*)$ index.php?command_name=$1 [L,QSA]

这些似乎没有问题,但我只是不知道如何让它们一起工作。

我可以看到第二条规则可能出了什么问题,因为第一个规则匹配“index(...)”所以我尝试了这些的不同变体,但我总是以无休止的重定向循环或被重定向回来进入网站的根目录。

4

1 回答 1

0

您需要匹配实际请求,而不是删除index.php. 两条规则不能一起工作的原因是因为 mod_rewrite 一直循环遍历所有规则,直到 URI 停止更改。第二条规则将 URI 重写为index.php,第一条规则匹配并删除它,然后第二条规则将其重写回来,等等。

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)index\.(php|html?)
RewriteRule ^ /%1 [R=301,L]

然后你应该能够保持第二条规则不变。

于 2012-09-18T22:28:17.313 回答