2017-05-08 83 views
1

我需要URL将大写URL写为小写。重写URL以排除某些HTML文件

我得到了那部分工作。

但是,我有问题。我很感兴趣,从上述*.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

查询字符串不是REQUEST_URI的一部分,它存储在QUERY_STRING中。因此,尝试这样的事情,肚里现有的规则之前:

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

你需要做这种方式(它自己独立的规则)的原因,而不是把排除现有的规则上,是因为你不能和RewriteCond的负值匹配,因此如果只有一个应用(.html或?vs = nnn),将它们放在现有规则中作为负值匹配将阻止其运行。当两者都适用时拒绝,你需要在这样一个单独的正面匹配中进行。

如果您有需要申请在此之后这些网址,看看[S=1]标志(documentation),这将跳过匹配下一条规则,而不是[L]它说停止比赛后处理在这里(和其他规则因此不要将这些URL的后续规则应用于此)。

规则RewriteRule^-只是说不改变任何东西,它用来只应用标志的效果。

+0

感谢您的详细解释!我应该如何更改字符串的vs = \ d + $。即:vs = v123423?谢谢。 – DarthVader

+0

我改变它允许任何东西作为价值,只有它必须有一个,让我知道,如果这不是你想要的。 – SuperDuperApps