正则表达式处理URL中的'/'修剪

时间:2010-11-10 12:07:09

标签: regex

我使用以下重写规则:

RewriteRule ^search/(.*)/(.*) search.php?letter=$1&num=$2 [NC,L]

在浏览器中加载“/ search / a / 1”时工作正常,这意味着在使用PHP进行调试时,变量的值为:$letter='a'$num=1

但是,当加载“/ search / a / 1 /”(末尾带有“/”)时,vars的值为: $letters='a/1'$num=NULL

我应该使用什么正则表达式来使“/ search / a / 1”和“/ search / a / 1 /”以同样的方式产生?

谢谢,

乔尔

2 个答案:

答案 0 :(得分:1)

尝试:

RewriteRule ^search/([^/]*)/([^/]*) search.php?letter=$1&num=$2 [NC,L]

这可确保组$1$2永远不会包含斜杠。正则表达式允许军事匹配(最后没有$),因此它将忽略更多的令牌:/search/a/1/blah/blah应该按预期工作。

最后只允许一个斜杠,而不是更多(当然,请确保你没有.*在其他规则中):

RewriteRule ^search/([^/]*)/([^/]*)/?$ search.php?letter=$1&num=$2 [NC,L]

答案 1 :(得分:1)

您匹配任何字符.,但希望匹配任何字符,但需要斜杠[^/],所以:

RewriteRule ^search/([^/]*)/([^/]*) search.php?letter=$1&num=$2 [NC,L]