问题与多个重写规则

问题描述:

我有这样的规则会被重定向没有在他们.所有请求index.php,并能正常工作:问题与多个重写规则

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

现在我也想禁止任何请求在原始URL包含.php。当我添加另一个这样的规则(第一个)之后,第一个规则游:

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

我认为增加[L]到的第一条规则将停止从正在执行的第二条规则,但似乎都没有效果:从所述第一规则(即index.php)的输出相匹配的第二条规则和所有请求在404.php结束。我在这里做错了什么?

[L]的意味着没有多个规则此请求处理,但整个路径被再次触发正在处理时的index.php。尝试添加一个新的规则,使404规则只有在请求的页面不是index.php时才会触发,如下所示:

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

谢谢,我的工作内容与您的示例类似。我没有意识到每个规则都会引发新的请求。还有一件事:有没有办法判断一个URL是原来的一个或重写一个?这样我可以防止用户直接访问'index.php'。 – casablanca 2010-09-03 19:53:44

+0

呀,看看mod_rewrite的参考,有一个为子请求的测试。 – zigdon 2010-09-03 20:03:16