htaccess:通过index.php处理所有请求,除了特定页面

时间:2019-06-07 14:29:37

标签: .htaccess

我有一个htaccess文件,该文件可以使所有请求都由index.php处理:

RewriteEngine On
RewriteBase /

RewriteRule ^(.*)/?$ index.php?q=$1 [L]

除了对myfile.php的所有请求(包括诸如myfile.php?somecontent = 1之类的额外查询字符串)之外,我希望具有相同的行为。因此,所有在查询字符串中包含myfile.php的请求都将由原始文件myfile.php

处理。

如何添加此类例外?

2 个答案:

答案 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]