如何实现URL重写具有相同扩展名的两个规则?

时间:2014-02-21 09:23:13

标签: php html mod-rewrite url-rewriting

我的htaccess代码:

Options +FollowSymLinks
RewriteEngine On

RewriteRule ^([a-zA-Z0-9_-]+)-([0-9]+)\.html$ post-details.php?post_id=$2 [L]

RewriteRule ^post-year-([0-9]{4})-([0-9]+)\.html$ post-details-year.php?post_year=$1&post_month=$2  [L]

第一条规则是工作并给我正确的输出,但第二条规则不是;它跳到第一条规则,“ post_details.php ”需要“ post-details-year.php ”。

另外,当我更改文件扩展名时:

示例:

RewriteRule ^post-year-([0-9]{4})-([0-9]+)\.html$ post-details-year.php?post_year=$1&post_month=$2  [L]

RewriteRule ^post-year-([0-9]{4})-([0-9]+)\.cgi$ post-details-year.php?post_year=$1&post_month=$2  [L]

1 个答案:

答案 0 :(得分:0)

重写引擎一个接一个地开始越过你的规则,直到找到适合你的规则。

问题是你的第一条规则非常强大,并且它抓住了你不想要的网址。

当您尝试访问post-year-123.html时,第一条规则会将post-year与正则表达式的([a-zA-Z0-9_-]+)部分匹配,将123([0-9]+)匹配,然后只需根据第一条规则重定向您。

如果你切换它们,并把第二个规则放在第一位,它将首先尝试匹配它并成功,从而将你送到你想要的地方。