如何在.htaccess中创建异常

如何在.htaccess中创建异常,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我想使用友好的URL: RewriteRule ^([A-Za-z0-9_-]+)/$ pages/$1.php [QSA,L] 但同时,我希望/forum/folder被排除在.htaccess文件中的该规则之外 我该怎么做 。。。我希望排除/forum/folder 您的 RewriteRule 模式(IE. ^([AZ-Z-99--+])/$< /代码>已经排除URL路径 /论坛/文件夹< /代码>,因为该模式不允许在URL路径中间有斜线(目录分隔符);只有在最后 因此,如果/forum

我想使用友好的URL:

RewriteRule ^([A-Za-z0-9_-]+)/$ pages/$1.php [QSA,L]
但同时,我希望
/forum/folder
被排除在
.htaccess
文件中的该规则之外

我该怎么做

。。。我希望排除
/forum/folder

您的<代码> RewriteRule <代码>模式(IE.<代码> ^([AZ-Z-99--+])/$< /代码>已经排除URL路径<代码> /论坛/文件夹< /代码>,因为该模式不允许在URL路径中间有斜线(目录分隔符);只有在最后

因此,如果
/forum/folder
仍在路由中,那么其他东西正在执行此操作。如果此子目录(假设它是物理目录)中还有一个使用mod_rewrite的
.htaccess
,则可能会遇到冲突


否则,有几种方法可以例外:

#1-排除所有文件和文件夹:如果您特别想排除所有被重写的文件和文件夹(假设
/forum/folder
是一个物理目录),那么您可以特别检查这一点,并且仅在URL路径未映射到文件或目录时处理
重写规则。例如:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/$ pages/$1.php [L]
RewriteRule ^forum/folder - [L]
RewriteCond %{REQUEST_URI} !^/forum/folder
RewriteRule ^([\w-]+)/$ pages/$1.php [L]
此处不需要
QSA
标志,因为默认情况下会追加请求中的查询字符串。只有在替换中指定查询字符串并且需要将其与请求中的查询字符串合并时,才需要此标志。正如Deadooshka在评论中所提到的,
\w
[a-Za-z0-9\]
的简写字符,因此这稍微简化了正则表达式


#2-排除规则:在文件开头使用与要排除的路径匹配的规则,然后停止处理。例如:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/$ pages/$1.php [L]
RewriteRule ^forum/folder - [L]
RewriteCond %{REQUEST_URI} !^/forum/folder
RewriteRule ^([\w-]+)/$ pages/$1.php [L]
如果请求的URL以
/forum/folder
开头,则停止此处,不再处理进一步的规则


#3-否定条件:在规则本身中包含否定条件(
RewriteCond
指令)。例如:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/$ pages/$1.php [L]
RewriteRule ^forum/folder - [L]
RewriteCond %{REQUEST_URI} !^/forum/folder
RewriteRule ^([\w-]+)/$ pages/$1.php [L]
仅当请求的URL不是以
/forum/folder
开头时,才会处理
重写规则。
前缀否定正则表达式


#4-在
重写规则
模式中使用负前瞻:
如果您只有一个规则和一个要从该规则中排除的URL,则可以在
重写规则
模式(regex)中使用负前瞻。例如,要排除上述指令中的URL
/forum

RewriteRule ^((?!forum)[\w-]+)/$ pages/$1.php [L]

(?!论坛)
是消极的前瞻。

A-Za-z0-9
\w
请将您尝试过的代码添加到您的问题中。如果
.htaccess
文件中有其他指令,请添加整个
.htaccess
文件-可能存在冲突。另外,您在子目录中还有其他
.htaccess
文件吗?这里可能还有其他问题,因为您现有的指令已经排除了
/forum/folder
格式的URL路径。如果此子目录中有一个附加的
.htaccess
文件,则这可能是它无法工作的原因。我已经更新了我的答案。