Apache Mod rewrite-重写所有内容,但

Apache Mod rewrite-重写所有内容,但,apache,mod-rewrite,Apache,Mod Rewrite,我有一行代码: RewriteRule ^(.*)/$ allcities.php?state=$1 [QSA,L] 但是,我如何更改它,使它不会重写我创建的新目录,例如“admin”。与当前一样,该规则也正在被重写。重写规则按接收顺序进行处理。在处理该规则之前,您需要有一个将路由到现有目录的处理程序。例如: RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ a

我有一行代码:

RewriteRule ^(.*)/$ allcities.php?state=$1 [QSA,L]

但是,我如何更改它,使它不会重写我创建的新目录,例如“admin”。与当前一样,该规则也正在被重写。

重写规则按接收顺序进行处理。在处理该规则之前,您需要有一个将路由到现有目录的处理程序。例如:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ allcities.php?state=$1 [QSA,L]

重写规则按接收顺序进行处理。在处理该规则之前,您需要有一个将路由到现有目录的处理程序。例如:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ allcities.php?state=$1 [QSA,L]

您可以使用
RewriteCond
进行以下操作:

RewriteCond %{REQUEST_URI} !^/admin
RewriteRule ^(.*)/$ allcities.php?state=$1 [QSA,L]
注意
RewriteCond
上正则表达式前面的感叹号。它使正则表达式恢复其含义。因此,在本例中,如果请求URI不是以
/admin
开头,则条件为true


有关更多信息,请参阅。

您可以使用
RewriteCond

RewriteCond %{REQUEST_URI} !^/admin
RewriteRule ^(.*)/$ allcities.php?state=$1 [QSA,L]
注意
RewriteCond
上正则表达式前面的感叹号。它使正则表达式恢复其含义。因此,在本例中,如果请求URI不是以
/admin
开头,则条件为true


有关详细信息,请参阅。

谢谢。但是,如果有一个以admin开头的文件,会发生什么?您可以毫无问题地将其更改为/admin/吗?是的,您可以使用您需要的任何正则表达式,例如,
^/admin/?$
,它将使用可选的尾部斜杠匹配路径。@Holger我想您的意思是
^/admin(/|$)
-您编写的规则只会在/admin或/admin/上不完全匹配。@fluffy您的版本会做什么?这是我想要的。但是,是的,这不一定是布雷特真正想要的:)但我通常猜得不好……谢谢。但是,如果有一个以admin开头的文件,会发生什么?您可以毫无问题地将其更改为/admin/吗?是的,您可以使用您需要的任何正则表达式,例如,
^/admin/?$
,它将使用可选的尾部斜杠匹配路径。@Holger我想您的意思是
^/admin(/|$)
-您编写的规则只会在/admin或/admin/上不完全匹配。@fluffy您的版本会做什么?这是我想要的。但是,是的,这不一定是布雷特真正想要的:)但我通常猜得不好。。。