Regex 正则表达式在在线正则表达式测试器中工作,但不在mod rewrite中

Regex 正则表达式在在线正则表达式测试器中工作,但不在mod rewrite中,regex,apache,.htaccess,mod-rewrite,Regex,Apache,.htaccess,Mod Rewrite,正则表达式对我来说是非常新的东西,我在使用它们重定向以下形式的链接时遇到了一些问题: url/search/aaa.bbb?label=dasdsf32r%20sdFa 例如: url/search.php?keyword=dasdsf32r%20sdFa 下面的正则表达式适用于:例如,但当我将其放入.htaccess文件时,重定向不起作用: RewriteRule ^url/search/aaa\.bbb\?label=([^\t\r\n\v\f]+)$ url/search.php?ke

正则表达式对我来说是非常新的东西,我在使用它们重定向以下形式的链接时遇到了一些问题:

url/search/aaa.bbb?label=dasdsf32r%20sdFa
例如:

url/search.php?keyword=dasdsf32r%20sdFa
下面的正则表达式适用于:例如,但当我将其放入.htaccess文件时,重定向不起作用:

RewriteRule ^url/search/aaa\.bbb\?label=([^\t\r\n\v\f]+)$ url/search.php?keyword=$1 [NC,L,END]
你必须使用

RewriteCond %{THE_REQUEST}
如果要分析/修改
获取
参数,因为
重写规则
不包含这些参数

此外,您应该使用
[NC,L,R=301]

查询字符串(在
之后的所有内容)不是用于匹配
重写规则
指令模式的URI的一部分。您必须使用
%{THE_REQUEST}
或推荐的
%{QUERY_STRING}
变量,任何分组都可以使用
%
符号反向引用:

RewriteCond %{QUERY_STRING} ^label=([^&]+)$
RewriteRule ^url/search/aaa\.bbb$ /url/search.php?keyword=%1 [L,NC]
如果您确实想要重定向(如中所示,将浏览器发送到新URL,使其显示在位置栏中),则还需要在重写标志中包含
R
R=301
(永久重定向):

[L,NC,R]

“不工作”会发生什么?这意味着没有重定向。url没有改变,尽管使用了标记
R=301
,但我还是得到了404错误。htaccesstester,我将向您展示重写的url以及满足哪些条件:您能解释为什么我需要将其用于此特定的重写规则吗?同一.htaccess文件中的其他类似重定向不使用
RewriteCond
,例如:
RewriteRule^url/cat/([^\t\r\n\v\f]+)(([0-9]+)$url/cat.php?id=$2[NC,L,END]
作为
END
标志,它结束所有重定向并防止重新计算重写的请求。
RewriteRule
的左侧不包含参数。因此,如果请求是
http://site.com/path/file?paramter=value
,然后在
重写规则
中,您只需在左侧
路径/文件
谢谢,成功了。实际上,我不希望新的url可见,所以我坚持使用
[L,NC]
标志。