Regex URL重写以排除某些HTML文件

Regex URL重写以排除某些HTML文件,regex,apache,mod-rewrite,url-rewriting,Regex,Apache,Mod Rewrite,Url Rewriting,我需要的网址写大写网址到小写 我让那部分工作起来了 然而,我有问题。我有兴趣从上述*.html?vs=12312312 我尝试了以下方法: RewriteCond %{REQUEST_URI} !^.*\.(html\?vs=) [NC] RewriteCond %{REQUEST_URI} !(.*\.html\?vs=.*)$ [NC] 但它不起作用 http://foo.com/com.foo.bar/content/Any.html?vs=12312312 以上内容应保持原样,不得

我需要的网址写大写网址到小写

我让那部分工作起来了

然而,我有问题。我有兴趣从上述
*.html?vs=12312312

我尝试了以下方法:

RewriteCond %{REQUEST_URI} !^.*\.(html\?vs=) [NC]
RewriteCond %{REQUEST_URI} !(.*\.html\?vs=.*)$ [NC]
但它不起作用

http://foo.com/com.foo.bar/content/Any.html?vs=12312312
以上内容应保持原样,不得重写

上面的规则怎么了?正确的语法应该是什么

更新

我尝试了以下方法:

RewriteCond %{REQUEST_URI} !^.*\.(html\?vs=) [NC]
RewriteCond %{REQUEST_URI} !(.*\.html\?vs=.*)$ [NC]

但还是没有运气

查询字符串不是
请求URI的一部分,它存储在
查询字符串中。因此,请尝试这样的方法,它先于您现有的规则:

RewriteCond %{REQUEST_URI} \.html$
RewriteCond %{QUERY_STRING} ^vs=[^&=]+$
RewriteRule ^ - [L]
您需要这样做的原因(作为它自己的独立规则),而不是在现有规则上放置排除,是因为您不能使用
RewriteCond
的负匹配执行和,因此将它们作为负匹配放置在现有规则上会阻止它在仅应用一个(.html或?vs=nnn)的情况下运行。若要在两者都适用时拒绝,您需要在一个单独的、积极的匹配中这样做

如果在此之后有其他规则需要应用于这些URL,请查看
[S=1]
标志(),该标志将跳过匹配的下一个规则,而不是
[L]
,该标志表示在匹配后停止处理(因此不应用这些URL的后续规则)


规则
RewriteRule^-
只是说不要更改任何内容,它仅用于应用标志的效果。

感谢您的详细解释!。如何更改字符串的vs=\d+$。ie:vs=v123423?谢谢。我改变了它,允许任何东西作为值,只是它必须有一个,如果这不是你想要的,请告诉我。