Apache Htaccess重写URL问题:如何区分列表和详细页面
我正在开发一个商业网站,在那里用户可以发布任何类别的项目(类别可以是2到4级) 我想为列表和详细信息页面生成URL:Apache Htaccess重写URL问题:如何区分列表和详细页面,apache,mod-rewrite,Apache,Mod Rewrite,我正在开发一个商业网站,在那里用户可以发布任何类别的项目(类别可以是2到4级) 我想为列表和详细信息页面生成URL: 列表页面将显示内部类别中的项目列表 详细信息页面将显示内部类别中项目的所有信息 (内部类别是指层次结构中的最后一个类别,即/classified/autos4x4s/mitsubishi/lancer/内部平均值“lancer”) 以下是我想要生成的链接 /classified/autos4x4s/mitsubishi/lancer/(用于上市) /classified/au
- 列表页面将显示内部类别中的项目列表
- 详细信息页面将显示内部类别中项目的所有信息
(内部类别是指层次结构中的最后一个类别,即
内部平均值“lancer”)/classified/autos4x4s/mitsubishi/lancer/
/classified/autos4x4s/mitsubishi/lancer/
(用于上市)/classified/autos4x4s/mitsubishi/lancer/2011/3/12/lancer-2002-in-good-condition-14/
(详细信息)#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/
)
现在所有其他页面都很好,但当我通过/classified/autos4x4s/mitsubishi/lancer/2011/3/12/lancer-2002-in-good-condition-14/
时,它总是转到列表页面(ads.php),而不是详细页面
任何帮助都将不胜感激。请注意正则表达式部分:
(.*)/(.*)/(.*)/(.*)/(.*)/(.*)
点也将匹配“/”,因此对于某些URL,这将导致可能匹配的组合爆炸,使得重写效率非常低。请考虑写这篇文章中的任何一个:
(\w+)/(\w+)/(\w+*)/(\w+*)/(\w+*)/(\w+*)
([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)
您的问题也与此相关:包含6个“/”字符的url也将与您的4倍斜杠模式匹配(因为.matches/也是)
你能试试吗
#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]
好的,老师,让我知道,怎么接受?现在有什么帮助吗?提前感谢。点击应答器旁边的复选标记图标www.example.com/classified/autos4x4s/mitsubishi/lancer/2011/3/12/lancer-2002-in-good-condition-14/(详情)如下:www.example.com/classified/autos4x4s/mitsubishi/lancer/2011-3-12/lancer-2002-in-good-condition-14/(详情)由于date是一个单独的实体,感谢您的回复,我已经将其更改为/([^/]+)。现在,由于详细页面url包含日期,所以我通过编写url中日期值的Tconditio检查来解决这个问题。RewriteCond%{REQUEST_URI}/(.*)/././([0-9]{4}-[0-9]{2}-[0-9]{2}/(.*)/.*RewriteRule^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/)/([^/]*)/)/?$detail.php?$detail.php?&dt=%2&at=%3&c1=$2&c2=$c3=$c3=$3=$c4,尝试将$1/$2/$4重新定向,但未能将其作为页面的工作条件,但不包括在上面的列表中,收到“未找到页面”错误。重写cond%{REQUEST_URI}/(.*)/.*/([0-9]{4}-[0-9]{2}-[0-9]{2})/(.*)/.*重写规则^([^/]*)/([^/]*)/([^/]*)/([^/]*)/?([^/]*)/?$ads.php?c1=$1和c2=$2和c3=$3和c4=$4[NC,L]但不起作用,请帮助.Hmmm。你的话很难懂。如前所述,不建议在模式中使用多个。*部分。我不明白你为什么用?在您的模式([^/]*)/?([^/]*)/?)中,这是一个坏主意,因为现在您将/设置为可选,并且许多组合再次成为可能…是的,您是对的,它会产生一些其他问题,但我想再次指出,由于这里没有所见即所得编辑器,因此很难阅读。我想做到这一点。我想从我的sitename开始,然后是sitename\cars\,然后是sitename\cars\honda\,然后是sitename\cars\honda\Civic\等等。这是一种平稳的方式,详细信息sitename\cars\honda\Civic\2011-04-07\待售优秀汽车\日期和标题也是如此。
#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]