mod_rewrite:检查查询是否包含软连字符并将其删除

时间:2013-06-10 15:09:39

标签: .htaccess mod-rewrite

在我的http日志中,我看到: “GET / category / f%C2%ADile-to-download / HTTP / 1.1”301 而不是“GET / category / file-to-download / HTTP / 1.1”200 我发现%C2%AD是一个软连字符(不可见符号)。

我需要检查对Apache的查询是否包含软预告,以及是否删除它。有关找到软连字符并删除它的最佳方法的任何建议? 我用RewriteRule做了一些测试,但卡住了。

谢谢!

2 个答案:

答案 0 :(得分:0)

据我了解,mod_rewrite使用un-escaped characters,因此为了正确匹配软连字符然后将其删除,您需要编辑并保存.htaccess文件RewriteRule ([^-]*)-([^-]*) $1$2 3}}编码(大多数现代编辑都会这样做)。

然后,您需要在规则中输入软连字符。以下将( should!?)从您的输入中删除单个软连字符,但如上所述,它依赖于UTF-8格式的文件:

-

请注意,您需要将RewriteRule ([^\xc2\xad]*)\xc2\xad([^\xc2\xad]*) $1$2 [N] 替换为实际的UTF-8短划线。

也许更简单的选择是:

[N]

它使用您看到的特定UTF-8代码将其从字符串中删除。 {{1}}应重新运行所有重写规则,这将删除所有剩余的软连字符。

答案 1 :(得分:0)

谢谢@icabod

目前我的规则在我的情况下有效:

RewriteCond %{REQUEST_URI} \xc2\xad [NC]
RewriteRule ([^\xc2\xad]*)[\xc2\xad]+([^\xc2\xad]*) /$1$2 [N,R=301,L,NC]

.htaccess应该是如上所述的UTF-8格式。 R=301 - 使用HTTP代码301重定向 NC - 不区分大小写 但它不适用于URL的不同位置的两个软连字符,如下所示:

  

/类别/ F%C2%ADile到d%C2%ADownload /

相关问题