在我的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做了一些测试,但卡住了。
谢谢!
答案 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 /