我想显示以下示例的网址:
1)http://www.domainname.com/detail/name/123.html
2)http://www.domainname.com/detail/124.html
在两个网址中,我想显示“name”是否存在,然后想要显示带有“name”的URL,否则不显示“name”。
1) RewriteRule ^detail/(.*).html$ detail.php?id=$1 [QSA]
2) RewriteRule ^detail/(.*)/(.*).html$ detail.php?id=$2 [QSA]
第一条规则是没有“名字”的工作文件。第二条规则不起作用,并为所有页面提供404。
先谢谢。
答案 0 :(得分:1)
您只能使用一个规则来处理这两种情况:
RewriteRule ^detail/(?:[^/]+/)?([^./]+)\.html$ detail.php?id=$1 [L,NC,QSA]
答案 1 :(得分:0)
您遇到的问题是,第一个规则与第一个和第二个案例相匹配。显然当id为name/123
时,您的应用程序无法处理它。你想要做的是将字符限制为非斜杠字符。毕竟,这意味着它只能匹配最后一个路径段。除此之外,强迫自己始终逃避正则表达式中的字面点。如果你不这样做,那么点几乎可以匹配......
RewriteRule ^detail/([^/]+)\.html$ detail.php?id=$1 [QSA,L]
RewriteRule ^detail/[^/]+/([^/]+)\.html$ detail.php?id=$1 [QSA,L]