冲突重写规则htaccess

时间:2015-05-08 00:56:24

标签: php .htaccess mod-rewrite

我有这两个规则彼此相邻

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)?$ category-groups.php?furl=$1 [QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)-([^/\.]+)?$ product.php?id=$2&head=$1 [QSA]

这有效

/category-groups.php?furl=my-category-page
redirects to
/my-category-page

这不起作用

/product.php?id=100&head=this-product
does not redirect to
/this-product-100

product.php页面实际上已退回到category-groups.php页面。

我希望这是有道理的。我尝试过很多东西,但无法解决这个问题

由于

1 个答案:

答案 0 :(得分:1)

您需要交换规则的顺序并使正则表达式匹配数字:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)-([0-9]+)?$ product.php?id=$2&head=$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)?$ category-groups.php?furl=$1 [QSA,L]

否则^([^/\.]+)?$将始终匹配所有内容。