.htaccess RewriteRule输出错误的参数结果

时间:2015-11-12 21:53:48

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

我正在尝试使用.htaccess RewriteRule来美化一些网址,但我遇到了一个我无法修复的问题。 我写了这个:

 RewriteEngine On

 RewriteRule ^(.*)/(foro|forum)$  code/forum/forum.php?id=$1
 RewriteRule ^(.*)/(foro|forum)/(.*)$  code/forum/forum.php?id=$1&subf=$3
 RewriteRule ^(.*)/(foro|forum)/(.*)/(.*)$  code/forum/forum.php?id=$1&subf=$3&post=$4

第一个url重写正常工作,结果显示id参数(即localhost / web / user501 / forum - > id = user501)。 它与第二个相同(localhost / web / user501 / forum / 3 - > id = user501,subf = 3)。

但是当我尝试第三个url重写时,输出id不是我想要的'user501',而是'code / forum / forum.php'。 其他变量的输出是正常的(localhost / web / user501 / forum / 3/5 - > id = code / forum / forum.php,subf = 3,post = 5)。

我试图改变那个url重写的第一个(。*)为一个固定的单词......它有效,但不幸的是我需要它是一个多变的词。

有人知道发生了什么吗?

1 个答案:

答案 0 :(得分:0)

这是因为^(.*)/(foro|forum)/(.*)/(.*)$模式也与code/forum/forum.php匹配,因此RewriteRule再次运行并为您提供写入结果。

试试这段代码:

RewriteEngine On

# ignore /code/forum/forum.php
RewriteRule ^code/forum/forum\.php$ - [L,NC]

RewriteRule ^(.*)/(foro|forum)$ code/forum/forum.php?id=$1 [L,QSA]
RewriteRule ^(.*)/(foro|forum)/(.*)$ code/forum/forum.php?id=$1&subf=$3 [L,QSA]
RewriteRule ^(.*)/(foro|forum)/(.*)/(.*)$ code/forum/forum.php?id=$1&subf=$3&post=$4 [L,QSA]