我需要在.htacess文件中使用规则替换为下划线,并且301重定向包含空格(%20)或双空格(%2520)字符的查询字符串的任何部分。
因此,例如,如果查询字符串包含以下参数
weight=really%2520really%20heavy
需要在URL中更改参数并重定向到:
weight=really_really_heavy
我需要这个作为临时措施;不幸的是,我无法访问生成这些参数的PHP脚本,但我正在等待它们被更改。
我会感激我可以在我的.htacess中放置一条规则来执行此操作。
答案 0 :(得分:2)
RewriteRule ^(.*)\ (.*)$ $1_$2 [N]
应该这样做(将括号中的选项调整为适合你的选项);它用下划线替换第一个空格,然后重复规则,直到它不再匹配为止。请注意,反斜杠空间可能不起作用;在这种情况下,我不知道该怎么做,因为mod_rewrite中的URL匹配空间有时非常挑剔。
答案 1 :(得分:1)
使用此选项匹配查询字符串:
RewriteEngine On
RewriteBase /path/to/this/directory
RewriteCond %{QUERY_STRING} ^(.*)(%20|%2520)(.*)$
RewriteRule ^(.+)$ $1?%1_%3 [N,R=301]
说明:要使301重定向生效,您需要将RewriteBase设置为包含.htaccess文件的目录(从Web浏览器看,相对于DocumentRoot)。
您必须设置RewriteCond以匹配查询字符串,并选择要匹配的模式。
在最后一行的替换模式中,$ 1是RewriteRule模式的后向引用,%1,%3是RewriteCond模式的后向引用。