【发布时间】:2017-10-20 14:39:48
【问题描述】:
这是我的 htaccess 代码
# Enable rewrite engine
RewriteEngine On
RewriteBase /
RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)\.php$ view-product.php?catSeoUrl=$1&subCatSeoUrl=$1&productSeoUrl=$3 [QSA,L]
RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)\.php$ products.php?catSeoUrl=$1&subCatSeoUrl=$1 [QSA,L]
RewriteRule ^([a-zA-Z0-9-]+)\.php$ products.php?catSeoUrl=$1 [QSA,L]
第二条和第三条规则运行良好。请看这里
http://domain.tdl/consumer-electronics/mobiles.php
http://domain.tdl/consumer-electronics.php
但是查看产品的第一条规则也重定向到 products.php,看看。
http://domain.tdl/consumer-electronics/mobiles/product-6.php
很奇怪,你能帮我解决这个问题吗?
【问题讨论】:
-
一旦应用第三条规则,就会自动应用第三条规则,因为它的模式与第一条规则的目标相匹配。从 2.4 版开始使用 apache http 服务器,您可以使用
END标志而不是L标志来防止这种情况发生。对于较旧的 apache 版本,您需要添加重写条件。 -
@arkascha 现在感谢它的作品,我的意思是 END 标志。我可以知道关于 L 和 END 标志的详细信息吗?
-
L标志终止了重写过程的 本次迭代,因此开始新的迭代,直到最后一次迭代不再导致重写,而 @987654329 @ flag finally 终止该请求的重写引擎,而不是该迭代。这是记录在案的,顺便说一句:httpd.apache.org/docs/current/mod/mod_rewrite.html
标签: php apache .htaccess redirect