我的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]
答案 0 :(得分:0)
重写引擎一个接一个地开始越过你的规则,直到找到适合你的规则。
问题是你的第一条规则非常强大,并且它抓住了你不想要的网址。
当您尝试访问post-year-123.html
时,第一条规则会将post-year
与正则表达式的([a-zA-Z0-9_-]+)
部分匹配,将123
与([0-9]+)
匹配,然后只需根据第一条规则重定向您。
如果你切换它们,并把第二个规则放在第一位,它将首先尝试匹配它并成功,从而将你送到你想要的地方。