我使用以下重写规则:
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 /”以同样的方式产生?
谢谢,
乔尔
答案 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]