我正在开发一个商业网站,用户可以在任何类别中发布项目(类别可以是2到4个级别)。
我想为列表和详细信息页面生成网址:
/classified/autos4x4s/mitsubishi/lancer/
内部均值“lancer”)以下是我想要生成的链接
/classified/autos4x4s/mitsubishi/lancer/
(上市)
/classified/autos4x4s/mitsubishi/lancer/2011/3/12/lancer-2002-in-good-condition-14/
(详情)
如果网址中只有4个类别,我想重定向到ads.php,如果传递了6个项目,我想重定向到detail.php(4个类别名称+ 2个日期和标题)。
我写下这些规则:
#listing ads
RewriteRule ^(.*)/(.*)/(.*)/(.*)/?$ ads.php?c1=$1&c2=$2&c3=$3&c4=$4 [NC,L]
#Detail pages
RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/?$ detail.php?c1=$1&c2=$2&c3=$3&c4=$4&dt=$5&at=$6 [NC,L]
但所有网站页面都会重定向到ads.php(列表页面)甚至主页。
我更改规则如下:(即使我不想在URL的开头使用列表和详细信息。为什么我在某个网站上看到我想要的内容:/classified/autos4x4s/mitsubishi/lancer/2011/3/12/lancer-2002-in-good-condition-14/
)
#Listing pages
RewriteRule ^Listing/(.*)/(.*)/(.*)/(.*)/?$ ads.php?c1=$1&c2=$2&c3=$3&c4=$4 [NC,L]
#Detail pages
RewriteRule ^Detail/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/?$ detail.php?c1=$1&c2=$2&c3=$3&c4=$4&dt=$5&at=$6 [NC,L]
现在所有其他页面都很好,但是当我通过/classified/autos4x4s/mitsubishi/lancer/2011/3/12/lancer-2002-in-good-condition-14/
时,它总是转到列表页面(ads.php)而不是详细页面。
任何帮助都将不胜感激。
答案 0 :(得分:0)
请注意正则表达式部分:
(.*)/(.*)/(.*)/(.*)/(.*)/(.*)
点也将匹配'/',因此对于某些URL,这会导致可能匹配的组合爆炸,使得重写效率非常低。请考虑将这部分写成以下任何一部分:
(\w+)/(\w+)/(\w+*)/(\w+*)/(\w+*)/(\w+*)
([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)
您的问题也与此相关:包含6个/'字符的网址也将与您的4次斜杠模式匹配(因为。匹配/也是)
你可以尝试一下:
#Listing pages
#e.g. /classified/autos4x4s/mitsubishi/lancer/
RewriteRule ^(\w+)/(\w+)/(\w+)/(\w+)/$ ads.php?c1=$1&c2=$2&c3=$3&c4=$4 [NC,L]
#Detail pages
#e.g. /classified/autos4x4s/mitsubishi/lancer/2011/3/12/lancer-2002-in-good-condition-14/
RewriteRule ^(\w+)/(\w+)/(\w+)/(\w+)/(\d+/\d+/\d+)/([^/]+)/$ detail.php?c1=$1&c2=$2&c3=$3&c4=$4&dt=$5&at=$6 [NC,L]