Regex 如何在跳过某些文件夹时重写所有URL?
我正在尝试重写我的URL以转到单个php文件:Regex 如何在跳过某些文件夹时重写所有URL?,regex,mod-rewrite,Regex,Mod Rewrite,我正在尝试重写我的URL以转到单个php文件: RewriteRule ^dir/(?:(?!style|js).)*$ http://www.domain.com/single.php?uri=$1 [QSA] 然而,排除/dir/js和/dir/style并不像我希望的那样有效 [重定向]domain.com/dir [重定向]domain.com/dir/jason [重定向]domain.com/dir/jason/pete [不重定向:好]domain.com/dir/js [不重
RewriteRule ^dir/(?:(?!style|js).)*$ http://www.domain.com/single.php?uri=$1 [QSA]
然而,排除/dir/js和/dir/style并不像我希望的那样有效
- [重定向]domain.com/dir
- [重定向]domain.com/dir/jason
- [重定向]domain.com/dir/jason/pete
- [不重定向:好]domain.com/dir/js
- [不重定向:好]domain.com/dir/js/*
- [不重定向:错误]domain.com/dir/json
RewriteCond %{REQUEST_URI} !^/dir/(js|style)(/.*)?$
RewriteRule ^dir/(.*)$ http://www.domain.com/single.php?uri=$1 [LQSA]
这基本上意味着,如果URL没有以/js或/style结尾(可以选择在这些dir下面有更多的路径组件),则应用重定向规则。尝试用
style\b | js\b
替换style | js
也许,RewriteCond
可以像在
RewriteCond %{REQUEST_URI} !^/dir/(style|js)($|/)
RewriteRule ^/dir/(.*)$ http://www.domain.com/single.php?uri=$1 [QSA]
或者使用您的消极前瞻断言:
RewriteRule ^dir/(?!(?:style|js)(?:/|$))(.*) http://www.example.com/single.php?uri=$1 [QSA]
但这不太好
或者您只需添加另一个关于$1
如何启动的测试:
RewriteCond $1 !^(style|js)(/|$)
RewriteRule ^dir/(.*) http://www.example.com/single.php?uri=$1 [QSA]
你可能想写“.*)”而不是“.)*”。谢谢你帮我修复我的语法错误。结尾的/应该是可选的。否则,domain.com/js将重定向。