0

我的.htaccess规则存在级联问题。考虑以下:

RewriteEngine on

RewriteRule ^product/(.*)$  product.php  [L,QSA]
RewriteRule ^(.*)$          index.php    [L]

有了上面的内容,如果我请求了一个类似http://example.com/product/product-slug的 URL ,那么我希望请求被路由到product.php。但是,它没有;我的index.php脚本被拾起请求。

我会认为第一个RewriteRule会被匹配,并且因为它有一个L(最后一个)标志,所以不会RewriteRule匹配更多的 s,包括底部的“catch-all”一个。

为什么这没有按预期工作?

4

3 回答 3

2

这应该对其进行排序:

RewriteRule ^product/(.*)$ product.php [L,QSA]

RewriteCond %{REQUEST_FILENAME} !product.php
RewriteRule ^.*$ index.php [L]

问题是因为规则在不同的集合中,即没有附加条件,它只停止处理当前的规则集(第一个)并跳转到第二个。

希望这一切都解决了:)

于 2012-12-12T14:24:16.747 回答
1

也许您的代码中有错字?您在问题中写“http://example.com/products/”,但在您的目标代码中^product$,没有 s。

另外,您的第一条规则太严格了。它只会匹配http://example.com/product/。您需要在产品之后包含一个通配符以允许它获取产品信息。类似的东西RewriteRule ^products/(.*)$ product.php [L,QSA]应该可以工作。

于 2012-12-12T13:41:42.510 回答
0

不是因为你把规则放在的顺序吗?下面的将覆盖对它上面的更改。尝试改变它们。

另外,是否需要设置 RewriteBase?您的项目是在实际域上,还是本地存储在服务器根目录的子目录中?

于 2012-12-12T14:07:16.720 回答