【问题标题】:Htaccess redirecting wrong pageHtaccess重定向错误的页面
【发布时间】: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


【解决方案1】:

一旦应用第三条规则,第三条规则也会自动应用,因为它的模式与第一条规则的目标相匹配。

从 2.4 版开始,您可以使用 END 标志而不是 L 标志来防止这种情况发生:

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 [END]
RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)\.php$ products.php?catSeoUrl=$1&subCatSeoUrl=$1 [END]
RewriteRule ^([a-zA-Z0-9-]+)\.php$ products.php?catSeoUrl=$1 [END]

对于较旧的 apache 版本,您需要添加重写条件:

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 [END]
RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)\.php$ products.php?catSeoUrl=$1&subCatSeoUrl=$1 [END]
RewriteCond %{REQUEST_URI} ^([^\]+)\.php$
RewriteRule ^([a-zA-Z0-9-]+)\.php$ products.php?catSeoUrl=$1 [END]

还有一个一般提示:您应该始终喜欢将此类规则放在 http 服务器(虚拟)主机配置中,而不是使用动态配置文件(.htaccess 样式文件)。众所周知,这些文件容易出错,难以调试,而且它们确实会降低服务器的速度。它们仅在您无法控制主机配置(阅读:非常便宜的托管服务提供商)或您有一个依赖于编写自己的重写规则的应用程序(这显然是安全噩梦)的情况下作为最后一个选项被支持)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 2023-03-10
    • 2014-12-14
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 2018-04-18
    相关资源
    最近更新 更多