【问题标题】:Multiple rewrite rules htaccess多个重写规则 htaccess
【发布时间】:2015-02-15 20:17:58
【问题描述】:

我想重定向我的主页:

  • / =>/app/index.php

和

  • /rep/ => /app/rep.php
  • /rep/new/ => /app/page/rep/rep_add.php
  • /rep/([0-9]*)/ => /app/rep.php

和

  • /ouv/ => /app/parc.php
  • /ouv/([0-9]*)/ => /app/parc.php
  • /ouv/([0-9])/([0-9])/ => /app/parc.php
  • /ouv/([0-9])/([0-9])/([0-9]*) / => /app/parc.php
  • /ouv/([0-9])/([0-9])/([0-9])/([0-9] )/ => /app/ouv.php
  • /ouv/([0-9])/([0-9])/([0-9])/([0-9] )/bdc/ => /app/page/ouv/bdc.php
  • /ouv/([0-9])/([0-9])/([0-9])/([0-9] )/bdc/new/ => /app/page/ouv/bdc_add.php
  • /ouv/([0-9])/([0-9])/([0-9])/([0-9] )/bdc/([0-9]*)/bdr/ => /app/page/ouv/bdr.php

并定义错误 404

这是我的 .htaccess,但它们不起作用,我不明白为什么。

ErrorDocument 404 /app/page/error/404.php
DirectoryIndex /app/index.php
RewriteEngine On


RewriteRule  rep/ /app/rep.php
RewriteRule  rep/([0-9]*)/ /app/rep.php
RewriteRule  rep/new/ /app/page/rep/rep_add.php

RewriteRule  /ouv/ /app/parc.php
RewriteRule  /ouv/([0-9]*)/ /app/parc.php
RewriteRule  /ouv/([0-9]*)/([0-9]*)/ /app/parc.php
RewriteRule  /ouv/([0-9]*)/([0-9]*)/([0-9]*)/ /app/parc.php
RewriteRule  /ouv/([0-9]*)/([0-9]*)/([0-9]*)/([0-9]*)/  /app/ouv.php
RewriteRule  /ouv/([0-9]*)/([0-9]*)/([0-9]*)/([0-9]*)/bdc/  /app/page/ouv/bdc.php
RewriteRule  /ouv/([0-9]*)/([0-9]*)/([0-9]*)/([0-9]*)/bdc/([0-9]*)/   /app/page/ouv/bdc.php
RewriteRule  /ouv/([0-9]*)/([0-9]*)/([0-9]*)/([0-9]*)/bdc/new/   /app/page/ouv/bdc_add.php
RewriteRule  /ouv/([0-9]*)/([0-9]*)/([0-9]*)/([0-9]*)/bdc/([0-9]*)/bdr/   /app/page/ouv/bdr.php

【问题讨论】:

    标签: php .htaccess redirect web


    【解决方案1】:

    它不起作用,因为RewriteRule ^(.*)$ app/$1捕获了所有东西,并且重写规则重写了被这个规则重写的东西,所以rep/变成了app/rep/等等。

    将该规则移到最后,它应该可以解决您的问题。

    【讨论】:

    • 好的,我删除了这条规则,它适用于 "rep" , "rep/25" ,但不适用于 "rep/new"。
    • 因为您的规则定义了 rep/new/ 的重写,而不是 rep/new。要获得 rep/new 工作,请将规则中的 rep/new/ 更改为 rep/new/?
    【解决方案2】:

    对于 RewriteRule,您必须定义规则的开始和结束,以便更好地检测。

    RewriteRule  /ouv/ /app/parc.php
    RewriteRule  /ouv/([0-9]*)/ /app/parc.php
    

    导致 /ouv/ 上的所有内容在第一条规则中重定向到 /app/parc.php。所以 /ouv/566/ 例如将被改写为 /app/parc.php566/ 。

    为了防止这种情况,您必须定义规则的结束点和规则的起点。

    RewriteRule  ^/ouv/$ /app/parc.php [NC,QSA,L]
    RewriteRule  ^/ouv/([0-9]*)/$ /app/parc.php [NC,QSA,L]
    

    另外我建议你也使用 [NC,QSA,L] 标志。

    【讨论】:

      猜你喜欢
      • 2017-11-21
      • 2013-06-29
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 2011-02-04
      • 2021-02-09
      • 2016-07-07
      相关资源
      最近更新 更多