htaccess重写规则冲突

时间:2015-06-16 16:26:51

标签: php .htaccess url mod-rewrite

www.example.com/category/sub_category/ .htaccess文件中的重新规则存在问题。

我当前的.htaccess文件看起来像这样。

RewriteRule ^([0-9a-zA-Z_-]+)/([0-9]+)$ products.php?cat=$1&id=$2 [NC,L]
RewriteRule ^([^/]*)/([0-9a-zA-Z_-]+)/([0-9]+)$ product_categories.php?cat=$2&id=$3 [NC,L]
RewriteRule ^(.*)/(.*)/([0-9a-zA-Z_-]+)/([0-9]+)$ product_details.php?cat=$3&id=$4 [NC,L]
RewriteRule ^([0-9]+)$  gallery.php?id=$1 [NC,L]

我正在尝试创建以下内容的网址。

www.example.com/product_name/1
www.example.com/category/sub_category/21
www.example.com/category/sub_category/product_name/233
www.example.com/gallery/872

www.example.com/gallery/872重定向到www.example.com/category/sub_category/872而不是gallery.php?id = 872

修改:更正的网址从www.example.com/gallery/872到www.example.com/category/sub_category/872。

2 个答案:

答案 0 :(得分:2)

您的问题是第一条规则匹配,最后一条规则永远不会被应用......

RewriteEngine on
RewriteRule ^gallery/([0-9]+)/?$  gallery.php?id=$1 [NC,L]
RewriteRule ^([0-9a-zA-Z_-]+)/([0-9]+)$ products.php?cat=$1&id=$2 [NC,L]
RewriteRule ^([^/]*)/([0-9a-zA-Z_-]+)/([0-9]+)$ product_categories.php?cat=$2&id=$3 [NC,L]
RewriteRule ^(.*)/(.*)/([0-9a-zA-Z_-]+)/([0-9]+)$ product_details.php?cat=$3&id=$4 [NC,L]

经验法则:首先特定的例外,然后更一般的规则。

如果您还在正则表达式模式中同时指定小写和大写字母,则NC标志没有意义。它是或者,而不是和。

(注意:我还包括了@anubhava在他的回答中发布的更正)

答案 1 :(得分:0)

您的上一条规则需要正则修改,因为您匹配/gallery/872并且您的模式只匹配1位或更多位数。

RewriteRule ^gallery/([0-9]+)/?$ gallery.php?id=$1 [NC,L,QSA]
RewriteRule ^([0-9a-zA-Z_-]+)/([0-9]+)$ products.php?cat=$1&id=$2 [QSA,L]
RewriteRule ^([^/]*)/([0-9a-zA-Z_-]+)/([0-9]+)$ product_categories.php?cat=$2&id=$3 [QSA,L]
RewriteRule ^(.*)/(.*)/([0-9a-zA-Z_-]+)/([0-9]+)$ product_details.php?cat=$3&id=$4 [QSA,L]

此外,您需要像我上面所示记录您的规则。