为什么我的.htaccess规则不起作用?

时间:2012-12-12 13:31:41

标签: mod-rewrite url-rewriting

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

RewriteEngine on

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

如上所述,如果我请求了 http://example.com/product/product-slug 这样的网址,那么我希望该请求可以路由到产品。 PHP 即可。但是,它没有;我的 index.php 脚本被选中了。

我原本认为第一个RewriteRule会匹配,因为它有一个L(最后)标志,不再匹配RewriteRule s,包括“catch” - 所有“在底部。

为什么这不按预期工作?

3 个答案:

答案 0 :(得分:2)

这应该对它进行排序:

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

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

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

希望能彻底解决这个问题:)

答案 1 :(得分:1)

也许你的代码中有拼写错误?您在问题中写了“http://example.com/products/”,但在您定位的代码中^product$,没有s。

另外,你的第一条规则太严格了。它只会匹配http://example.com/product/。你需要在产品之后加一张外卡才能让它拿起产品slug。像RewriteRule ^products/(.*)$ product.php [L,QSA]这样的东西应该有效。

答案 2 :(得分:0)

是不是因为您将规则置于其中的顺序?下面的内容将覆盖对其上方的更改。尝试改变它们。

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