Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何在跳过某些文件夹时重写所有URL?_Regex_Mod Rewrite - Fatal编程技术网

Regex 如何在跳过某些文件夹时重写所有URL?

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 [不重

我正在尝试重写我的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
  • [不重定向:好]domain.com/dir/js/*
  • [不重定向:错误]domain.com/dir/json
如何更改正则表达式以满足需要?编辑:

domain.com/dir/json不重定向,因为它与正则表达式不匹配

/dir/json不重定向的原因是因为js跟在dir/后面,而您的正则表达式只在dir/后面没有跟style或js时匹配。我认为消极的态度是错误的。我认为你真正想要的是:

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将重定向。