Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用mod_rewrite重定向字符串的一部分_Php_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

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

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中设置一条规则,我将不胜感

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

例如,如果querystring包含以下参数

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下)解决了这个问题。现在它工作得很好。再次感谢您在这方面的帮助,非常感谢。干杯