URL重写以排除某些HTML文件

时间:2017-05-08 16:08:52

标签: regex apache mod-rewrite url-rewriting

我需要将大写的URL写为小写。

我让那部分工作了。

然而,我遇到了问题。我有兴趣从以上*.html?vs=12312312

中排除

我尝试了以下内容:

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

但它没有用。

http://foo.com/com.foo.bar/content/Any.html?vs=12312312

以上应保持原样,不得重写。

上述规则有什么问题?什么应该是正确的语法?

更新

我尝试了以下内容:

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

但仍然没有运气。

1 个答案:

答案 0 :(得分:1)

查询字符串不属于REQUEST_URI,它存储在QUERY_STRING中。所以尝试这样的事情,这比你现有的规则要好:

RewriteCond %{REQUEST_URI} \.html$
RewriteCond %{QUERY_STRING} ^vs=[^&=]+$
RewriteRule ^ - [L]

你需要这样做的原因(作为它自己的单独规则),而不是对现有规则进行排除,是因为你不能对RewriteCond的否定匹配进行AND,所以把如果只有一个应用(.html或?vs = nnn),它们在你现有的规则上作为负匹配会阻止它运行。要在两者都适用时拒绝,你需要在一个单独的积极匹配中这样做。

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

规则[L]只是说不改变任何东西,它只用于应用旗帜的效果。