代码之家  ›  专栏  ›  技术社区  ›  rkaartikeyan

Htaccess重定向错误页面

  •  0
  • rkaartikeyan  · 技术社区  · 9 年前

    这是我的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

    但是查看产品的第一条规则也会重定向到产品。php,看一看。

    http://domain.tdl/consumer-electronics/mobiles/product-6.php

    很奇怪,你能帮我解决这个问题吗?

    1 回复  |  直到 9 年前
        1
  •  2
  •   arkascha    9 年前

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

    对于2.4版以后的apache http服务器,您可以使用结束标志而不是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 样式文件)。众所周知,这些文件容易出错,很难调试,而且它们确实会降低服务器的运行速度。只有在您无法控制主机配置的情况下(阅读:非常便宜的托管服务提供商),或者如果您的应用程序依赖于编写自己的重写规则(这显然是一场安全噩梦),才支持将其作为最后一个选项。

    推荐文章