使用mod_rewrite重定向字符串的一部分

时间:2011-02-06 15:33:13

标签: php apache .htaccess mod-rewrite

我需要在.htacess文件中使用规则替换为下划线,并且301重定向包含空格(%20)或双空格(%2520)字符的查询字符串的任何部分。

因此,例如,如果查询字符串包含以下参数

weight=really%2520really%20heavy

需要在URL中更改参数并重定向到:

weight=really_really_heavy

我需要这个作为临时措施;不幸的是,我无法访问生成这些参数的PHP脚本,但我正在等待它们被更改。

我会感激我可以在我的.htacess中放置一条规则来执行此操作。

2 个答案:

答案 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模式的后向引用。