99t*_*run 2 php regex .htaccess mod-rewrite
在我的.htaccess文件中,我定义了以下规则,
RewriteRule ^([-0-9a-zA-Z]+) search.php?id=$1
Run Code Online (Sandbox Code Playgroud)
如果我正在浏览http://example.com/abcd,则上述规则可以正常工作,
我需要使用& % - /url中的符号,例如:http : //example.com/ab&cd
要使规则生效,必须进行哪些更改?
不知道该规则如何为您工作。首先,它循环。其次,没有针对$2和的捕获组$3,但这并不重要,因为$1无论如何总会“搜索”。我假设您粘贴了一条行之有效的规则的部分代码。
为什么究其原因&,%或/没有被匹配是因为你的正则表达式表示:
[-0-9a-zA-Z]+
Run Code Online (Sandbox Code Playgroud)
表示:一个或多个字母,数字或破折号。因此,没有&,%或/。因此,您可以将其添加到方括号中:
RewriteRule ^([-0-9a-zA-Z/%&]+) search.php?id=$1&ff=$2&ffid=$3
Run Code Online (Sandbox Code Playgroud)
但是,请记住,在应用任何规则之前都会对URI进行解码。这意味着如果URI看起来像:
/foo%28bar
Run Code Online (Sandbox Code Playgroud)
您不需要与匹配%,因为URI被解码为:
/foo(bar
Run Code Online (Sandbox Code Playgroud)
并且您需要与匹配(。更好的选择可能是只匹配除点之外的所有点:
RewriteRule ^([^.]+) search.php?id=$1&ff=$2&ffid=$3
Run Code Online (Sandbox Code Playgroud)
或您比赛中不想要的任何东西。
尝试:
RewriteRule ^([^.]+)$ search.php?id=$1 [B]
Run Code Online (Sandbox Code Playgroud)
此处的区别是将$匹配项绑定到URI的末尾,并且B标志确保对&编码进行编码。