多个重写规则的问题

时间:2010-09-03 19:00:08

标签: apache mod-rewrite

我有这条规则,将所有请求重定向到. index.php,并且工作正常:

# Redirect all page requests to content handler
RewriteRule ^([^.]*)$ index.php [L]

现在,我还想禁止原始网址中包含.php的任何请求。当我添加这样的另一个规则(在第一个规则之后)时,第一个规则会中断:

# Disallow access to PHP files
RewriteRule \.php 404.php [L]

我认为将[L]添加到第一条规则会阻止执行第二条规则,但它似乎没有效果:第一条规则的输出(即index.php)与第二条规则匹配规则和所有请求最终都在404.php。我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

[L]表示不再为此请求处理规则,但在处理index.php时会再次触发整个路径。尝试添加新规则,只有当请求的页面不是index.php时才会触发404规则,如下所示:

# Disallow access to PHP files
RewriteCond %{REQUEST_FILENAME} !=index.php
RewriteRule \.php 404.php [L]