【问题标题】:.htaccess RewriteRule outputs wrong parameter result.htaccess RewriteRule 输出错误的参数结果
【发布时间】:2015-11-12 21:53:48
【问题描述】:

我正在尝试使用 .htaccess RewriteRule 来美化一些 url,但是我遇到了一个我无法解决的问题。 我写了这个:

 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”。 其他vars的输出正常(localhost/web/user501/forum/3/5 -> id=code/forum/forum.php, subf=3, post=5)。

我尝试将 URL 重写中的第一个 (.*) 更改为一个固定的单词……它起作用了,但不幸的是我需要它是一个多变的单词。

有人知道发生了什么吗?

【问题讨论】:

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


    【解决方案1】:

    这是因为^(.*)/(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]
    

    【讨论】:

    • 我试过了,它不再得到那个奇怪的 id,现在我明白我的错误了。
    猜你喜欢
    • 2015-09-28
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 2017-04-21
    • 1970-01-01
    • 2014-08-16
    相关资源
    最近更新 更多