我的 .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” - 所有“在底部。
为什么这不按预期工作?
答案 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?您的项目是在实际域上,还是本地存储在服务器根目录的子目录中?