【问题标题】:htaccess url rewrite conflicthtaccess url重写冲突
【发布时间】:2015-11-09 23:54:50
【问题描述】:
# RewriteRule ^section-([^.]+)/$ /index.php?section=$1 [L,QSA,NC]
RewriteRule ^section-([^.]+)/([^.]+)-C([^.]+)$ /index.php?section=$1&dossier=$2&catid=$3 [L,QSA,NC]

这是我目前尝试过的

第二个 RewriteRule 正确地重写了这样的 url:

http://www.example.com/section-test/categorie-one-C001

但是如果我取消第一行的注释,那么第二条规则就被打破了

我的问题是我也想重写这个网址:

http://www.example.com/section-test/

【问题讨论】:

  • [L] 表示如果匹配则停止处理后续规则。因此,当第一条规则未注释并匹配时,第二条规则将永远不会运行。

标签: apache .htaccess mod-rewrite url-rewriting


【解决方案1】:

为了方便起见,更改规则的顺序,并使尾部斜杠可选。

RewriteRule ^section-([^.]+)/([^.]+)-C([^.]+)/?$ /index.php?section=$1&dossier=$2&catid=$3 [L,QSA,NC]
RewriteRule ^section-([^.]+)/?$ /index.php?section=$1 [L,QSA,NC]

让我知道结果如何。

【讨论】:

  • 您可能应该从标志列表中删除L,因为如果匹配第一个规则,则永远不会处理第二个规则。
  • @imtheman 不应该有 L 标志,这就是它的重点。如果规则匹配,那么它应该停止你不想继续下一个规则。请记住,这是每个请求。因此,下次发出页面请求并且它匹配第二条规则时,它将跳过第一条规则并处理第二条规则。 L 标志是正确的。
  • 你说得对,我误解了要问的内容。
猜你喜欢
  • 1970-01-01
  • 2012-06-09
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多