问题与多个重写规则
问题描述:
我有这样的规则会被重定向没有在他们.
所有请求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]
谢谢,我的工作内容与您的示例类似。我没有意识到每个规则都会引发新的请求。还有一件事:有没有办法判断一个URL是原来的一个或重写一个?这样我可以防止用户直接访问'index.php'。 – casablanca 2010-09-03 19:53:44
呀,看看mod_rewrite的参考,有一个为子请求的测试。 – zigdon 2010-09-03 20:03:16