我有一个htaccess文件,该文件可以使所有请求都由index.php处理:
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)/?$ index.php?q=$1 [L]
除了对myfile.php的所有请求(包括诸如myfile.php?somecontent = 1之类的额外查询字符串)之外,我希望具有相同的行为。因此,所有在查询字符串中包含myfile.php的请求都将由原始文件myfile.php
处理。如何添加此类例外?
答案 0 :(得分:1)
您可以在此规则中添加否定的超前条件,以跳过此规则的某些已知URI:
RewriteEngine On
RewriteBase /
RewriteRule ^(?!(?:index|myfile)\.php$)(.+?)/?$ index.php?q=$1 [L,QSA,NC]
(?!(?:index|myfile)\.php$)
是否定的超前断言,它跳过了/myfile.php
和/index.php
的规则。
答案 1 :(得分:1)
您只需要在RewriteRule之前添加一个RewriteCond
最简单的方法:
RewriteCond %{REQUEST_URI} ! myfile.php
RewriteRule ^(.*)/?$ index.php?q=$1 [L]
还有一种更通用的方式来排除所有现有文件和目录:
RewriteCond %{REQUEST_FILENAME} ! -f
RewriteCond %{REQUEST_FILENAME} ! -d
RewriteRule ^(.*)/?$ index.php?q=$1 [L]