一个.htaccess文件中的两个规则不起作用

时间:2013-11-23 08:07:21

标签: .htaccess

以下是我的.htaccess代码

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)$ /products/product-full-view.php?src=$1&id=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/?$ /products/product-full-view.php?src=$1&id=$2

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)$ /buy/buy-full-view.php?src=$1&id=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/?$ /buy/buy-full-view.php?src=$1&id=$2

第一条规则工作正常,但没有采取第二条规则......无法理解这里发生的事情......

原始网址就像这样 www.example.com/products/product-full-view.php?src=somevalue&id=somevalue

和第二个 www.example.com/buy/buy-full-view.php?src=somevalue&id=somevalue

请帮助我运行第二条规则。

提前致谢

2 个答案:

答案 0 :(得分:1)

您尝试匹配相同的模式,提供或采用可选的尾部斜杠,四次。当您达到最后两条规则时,您的网址已经被重写为其他内容。

你可能想要看起来更像的东西:

RewriteEngine On
RewriteRule ^products/([0-9]+)/?$ /products/product-full-view.php?id=$1 [L]
RewriteRule ^buy/([0-9]+)/?$      /buy/buy-full-view.php?id=$1          [L]

或者:

RewriteEngine On
RewriteRule ^products/([a-zA-Z0-9_-]+)/([0-9]+)/?$ /products/product-full-view.php?src=$1&id=$2 [L]
RewriteRule ^buy/([a-zA-Z0-9_-]+)/([0-9]+)/?$      /buy/buy-full-view.php?src=$1&id=$2 [L]

无论如何还是该命令。

每次注意存根和[L]products/buy/避免相同的网址引用两个不同的位置,[L](表示“最后一个” “)告诉重写引擎在匹配时停止处理规则。

答案 1 :(得分:0)

如果网址与第二条规则匹配,则它也与第一条规则匹配。应用第一个规则后,生成的URL不再与第二个规则匹配。这就是为什么永远不会应用第二条规则。