如何解决htaccess中的条件,带有尾部的斜杠
URL的结构可以变化:
/page/mnu/id/
/page/mnu/submnu/id/subid/
/page/mnu/submnu/submnusub/id/subid/subidsub/
需要改变
page?mnu=$1&id=$2
page?mnu=$1&submnu=$2&id=$3&subid=$4
page?mnu=$1&submnu=$2&submnusub=$3&id=$4&subid=$5&subidsub=$6
我做了
RewriteRule ^page/(.*?)/(.*?)$ page.php?$mnu=$1&id=$2 [L]
RewriteRule ^page/(.*?)/(.*?)/(.*?)/(.*?)$ page.php?mnu=$1&submnu=$2&id=$3&subid=$4 [L]
RewriteRule ^page/(.*?)/(.*?)/(.*?)/(.*?)/(.*?)/(.*?)$ page.php?mnu=$1&submnu=$2&submnusub=$3&id=$4&subid=$5&subidsub=$6 [L]
第一个规则将覆盖最后两个规则
在$_GET
中回显page.php
时,它按预期的原因与第一条规则匹配。
/page/home/1/
Array ( [$mnu] => home [id] => 1 )
但是如果有第二条规则
/page/news/national/2/1
它打印
Array ( [$mnu] => news [id] => national/2/1 )
如果删除第一个规则,则将打印出来(这是预期的结果)
Array ( [$mnu] => home [submnu] => national [id] => 2 [subid] => 1)
与第三条规则相同,它会回声
/page/news/national/Local/Crime/2/1/1
Array ( [$mnu] => news [id] => national/Local/Crime/2/1/1)
如果开始时删除了两个规则,则会打印
Array ( [$mnu] => home [submnu] => national [submnusub] => Local [id] => 2 [subid] => 1 [subidsub] => 1)
如果只有两个尾部斜线,只有四个尾部斜线,只有六个尾部斜线,那么它如何应用条件
解决方法
您可以使用以下规则:
RewriteRule ^page/([^/]+)/([^/]+)/?$ page.php?$nm=$1&mnu=$2 [L,QSA,NC]
RewriteRule ^page/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ page.php?nm=$1&subnm=$2&mnu=$3&submnu=$4 [L,NC]
RewriteRule ^page/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ page.php?nm=$1&subnm=$2&subnmsub=$3&mnu=$4&submnu=$5&submnusub=$6 [L,NC]
请注意[^/]+
的使用,这意味着匹配非/
的任何字符中的1个或多个,另一方面,.*?
将匹配0个或多个任何字符。
另请注意,/?$
使每个URI方案的尾部斜杠为可选。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。