1

我对 Apache 的重写规则有一点问题

这是我的规则

Options +FollowSymLinks
RewriteEngine On

RewriteBase /

RewriteRule query/(.*) /php/query.php?name=$1 [L]
RewriteRule page/(.*) /php/page.php?page=$1 [L]

它完美地工作。但是当我尝试添加以下规则来重写与前两个规则不匹配的 URL

RewriteRule .* /php/page.php?page=home

服务器响应“内部服务器错误”。为什么 ?

4

2 回答 2

4

您可以使用RewriteLog来查看发生了什么,但即使使用 a[L]您也可以确保始终根据规则集重新检查重写的 url(这称为内部重定向)。

所以在这个最终的包罗万象之前添加一些RewriteCond,或者阻止它在内部重定向上运行,这样:

RewriteCond %{ENV:REDIRECT_STATUS} ^$

您还可以在最终的全部内容上添加[NS]or标记,其作用相同。[nosubreq]

但是阻止您的内部重定向规则也意味着它永远不会在任何先前的规则之后应用,并且有一天您可能想要它。所以要小心接下来的规则。

于 2013-11-06T10:59:39.427 回答
0

谢谢 !

最后,这是我的解决方案:

Options +FollowSymLinks
RewriteEngine On

RewriteBase /

RewriteRule query/(.*) /php/query.php?name=$1 [L]
RewriteRule page/(.*) /php/page.php?page=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ page/home [L,R]
RewriteRule ^$ page/home [NS,R]
于 2013-11-06T11:28:45.750 回答