Php 使用mod_rewrite重定向字符串的一部分
我需要在.htacess文件中使用下划线替换规则,并301重定向包含空格(%20)或双空格(%2520)字符的querystring的任何部分 例如,如果querystring包含以下参数Php 使用mod_rewrite重定向字符串的一部分,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,我需要在.htacess文件中使用下划线替换规则,并301重定向包含空格(%20)或双空格(%2520)字符的querystring的任何部分 例如,如果querystring包含以下参数 weight=really%2520really%20heavy 该参数需要在URL中更改并重定向到: weight=really_really_heavy 我需要这个作为临时措施;不幸的是,我无法访问生成这些参数的PHP脚本,但我正在等待它们被更改 如果能在我的.htacces中设置一条规则,我将不胜感
weight=really%2520really%20heavy
该参数需要在URL中更改并重定向到:
weight=really_really_heavy
我需要这个作为临时措施;不幸的是,我无法访问生成这些参数的PHP脚本,但我正在等待它们被更改
如果能在我的.htacces中设置一条规则,我将不胜感激
RewriteRule ^(.*)\ (.*)$ $1_$2 [N]
应该这样做(调整括号中的选项以适合您);它用下划线替换第一个空格,然后重复该规则,直到不再匹配为止。请注意,反斜杠空间可能不起作用;在这种情况下,我不知道怎么做,因为在mod_rewrite中匹配URL中的空格有时非常挑剔。使用此选项匹配查询字符串:
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以匹配querystring,并选择要匹配的模式
在最后一行的替换模式中,$1是对RewriteRule模式的反向引用,%1,%3是对RewriteCond模式的反向引用。恐怕这不能用htaccess来完成,您需要一些字符串函数,但这些函数在那里不可用。您好,谢谢您的回答。恐怕你的代码对我不起作用。某个地方需要R标志吗?嘿,我刚刚用R标志和所需的RewriteBase选项更新了我的答案。谢谢你的回答,工作愉快!我确实遇到了一个问题(它似乎与我拥有的将非www重定向到www的重写规则冲突),但通过更改my.htaccess中规则的顺序(将您的规则移到非www到www下)解决了这个问题。现在它工作得很好。再次感谢您在这方面的帮助,非常感谢。干杯