例外我想使用友好的URL:如何创建在.htaccess
RewriteRule ^([A-Za-z0-9_-]+)/$ pages/$1.php [QSA,L]
但在同一时间,我想/forum/folder
从在.htaccess
文件规则被排除在外。
我该怎么做?
例外我想使用友好的URL:如何创建在.htaccess
RewriteRule ^([A-Za-z0-9_-]+)/$ pages/$1.php [QSA,L]
但在同一时间,我想/forum/folder
从在.htaccess
文件规则被排除在外。
我该怎么做?
RewriteRule ^([A-Za-z0-9_-]+)/$ pages/$1.php [QSA,L]
...我想
/forum/folder
被排除
你RewriteRule
模式(即^([A-Za-z0-9_-]+)/$
)已经排除了URL路径/forum/folder
,由于图案不允许斜杠(目录分隔符)在URL路径的中间;只在最后。
所以,如果/forum/folder
仍然被路由,然后别的东西正在这样做。如果在这个子目录中有一个额外的.htaccess
(假设它是一个物理目录),使用mod_rewrite,那么你可能会遇到冲突。
否则,有几种方法可以破例:
#1 - 排除所有文件和文件夹:如果你特别想要被重写排除所有文件和文件夹(假设/forum/folder
是一个物理目录),那么你可以专门检查这个,如果URL路径没有映射到文件或目录,只能处理RewriteRule
。例如:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/$ pages/$1.php [L]
这里不需要的QSA
标志,由于从请求的查询字符串被默认追加。只有当您在替代中指定查询字符串并且您需要将其与请求上的查询字符串合并时,您是否需要此标志。正如Deadooshka在评论中提到的那样,\w
是[A-Za-z0-9_]
的简写字符,所以这简化了正则表达式。
#2 - 排除规则:使用你的文件要排除和简单地停止处理的路径相匹配开始的规则。例如:
RewriteRule ^forum/folder - [L]
如果请求的URL与/forum/folder
然后开始停止在这里并没有进一步的处理规则。
#3 - 否定的条件:包括一个否定 conditon(RewriteCond
指令)在规则本身。例如:
RewriteCond %{REQUEST_URI} !^/forum/folder
RewriteRule ^([\w-]+)/$ pages/$1.php [L]
这将只处理RewriteRule
请求的URL不/forum/folder
启动。CondPattern上的!
前缀抵消了正则表达式。
#4 - 在RewriteRule
模式负前瞻:如果你只需要你想从这个规则中排除一个规则,一个URL,那么你可以在RewriteRule
模式使用负先行 (正则表达式)。例如,为了排除在上述指令中的URL /forum
:
RewriteRule ^((?!forum)[\w-]+)/$ pages/$1.php [L]
的(?!forum)
是负先行。
'A-Za-z0-9_'是'\ w' – Deadooshka