url重写如何将其他所有内容发送到index.php条件

时间:2013-02-18 13:08:37

标签: .htaccess url-rewriting rewrite

有,

对于任何知道的人来说,这都是一项简单的任务,但我是Apache重写的新手,所以请耐心等待。 我写了两个重写条件,他们工作。我需要写第三个 - 所以其他一切都将转到index.php文件。问题是 - 如果我添加第三条规则,它始终应用于第2条。

RewriteEngine On 
RewriteRule   ^new/?$   new.php  [NC,L]
RewriteRule   ^thanks(.*)$ thankyou.php [NC,L]
RewriteRule   ^(.*)$ index.php 

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我认为答案在于以下关于与RewriteRule指令一起使用的L flag的段落:

  

如果您在.htaccess文件或中使用RewriteRule    部分,重要的是要有一些了解   如何处理规则。简化形式是一次   规则已经处理,重写的请求被交还给   URL解析引擎可以用它做它可能做的事情。它可能是   当处理重写的请求时,.htaccess文件或   可能会再次遇到该部分,因此可以运行规则集   从一开始就是这样。最常见的情况是,如果其中之一   规则导致重定向 - 内部或外部 - 导致   请求流程重新开始。

我认为发生的事情是,在执行重写之后,以某种方式将控制权交还给URL解析引擎,并再次运行规则。

您可以通过向最后一条规则添加一些重写条件来阻止此行为:

<IfModule mod_rewrite.c>

RewriteEngine On 

RewriteRule new/?$ new.php [NC,L]
RewriteRule thanks(.*)$ thankyou.php [NC,L]

# Only rewrite to index.php if the current request is not for an existing file or directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

</IfModule>