我正在尝试使用.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重写的第一个(。*)为一个固定的单词......它有效,但不幸的是我需要它是一个多变的词。
有人知道发生了什么吗?
答案 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]