有,
对于任何知道的人来说,这都是一项简单的任务,但我是Apache重写的新手,所以请耐心等待。 我写了两个重写条件,他们工作。我需要写第三个 - 所以其他一切都将转到index.php文件。问题是 - 如果我添加第三条规则,它始终应用于第2条。
RewriteEngine On
RewriteRule ^new/?$ new.php [NC,L]
RewriteRule ^thanks(.*)$ thankyou.php [NC,L]
RewriteRule ^(.*)$ index.php
感谢您的帮助。
答案 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>