无法解决.htaccess url rewriterule,为所有页面提供404

时间:2014-12-31 10:09:18

标签: php .htaccess mod-rewrite

我想显示以下示例的网址:

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。

先谢谢。

2 个答案:

答案 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]