【问题标题】:Forwarding query string with rewrite rule使用重写规则转发查询字符串
【发布时间】:2012-03-11 06:33:18
【问题描述】:

我正在尝试编写重写规则,但在转发查询字符串时遇到了一些严重问题。 我也尝试了[QSA] 标志,但没有成功。

按照正确的要求:

/localhost/registry/registry.php?id=something&password=somethingelse&uri=whatever

我会变成这样:

/localhost/registry/register

使用相同的帖子查询(id=something&password=somethingelse&uri=whatever)。 此时,我的 .htaccess 会将上述请求修改为如下:

/localhost/registry/registry.php?request=register&id=something&password=somethingelse&uri=whatever

然后,我在 .htaccess 中尝试了以下重写规则:

RewriteRule ^register$ http://localhost/registry/registry.php?request=$0&$1 [QSA]

但是,在最后一个 '&' 之后,什么都没有显示,并且 $1 变量是空的。 我要写什么样的重写规则?

提前致谢。

!!!解决方案!!!

RewriteRule ^register$ /registry/registry.php?request=$0 [QSA]

【问题讨论】:

    标签: .htaccess mod-rewrite url-rewriting query-string rewrite


    【解决方案1】:
    RewriteRule ^register$ /registry/registry.php?request=$0  [QSA]
    

    如果你去http://localhost/registry/register?id=1,那么查询字符串将是(来自php):

    array(2) {
      ["request"]=>
      string(8) "register"
      ["id"]=>
      string(1) "1"
    }
    

    【讨论】:

    • 它不起作用。返回的 http 状态为 400。如果我添加这样的重写规则: >RewriteRule ^register$ localhost/registry/registry.php [QSA] 请求(初始 POST 请求)重定向为 302 http 状态,但以下请求(localhost/registry/registry.php ) 是 GET,而不是 POST。为什么?此外,QSA 没有再次工作......
    • 父文件夹中有.htaccess文件吗?
    • 不在父文件夹中,而是在 localhost/registry 中。为什么? .htaccess 运行良好。是重写规则不起作用。现在我修复了 PHP 将所有请求转发到 registry.php 文件,但我不喜欢这个解决方案......
    • localhost 在你的RewriteRule 是目录还是它的主机名?
    • 对不起,我试过了,但我遇到了同样的问题。使用 GET 请求它可以工作,但不能使用 POST:htaccess 将原始请求(POST localhost/registry/register?id=5)重定向到没有字段的新 GET 请求(似乎 QSA 标志不起作用):GET localhost/registry/registry.php?request=register。就这样。还有其他建议吗?我真的不敢相信这种问题不存在解决方案。无论如何,感谢您的帮助;)
    猜你喜欢
    • 2015-09-10
    • 2016-08-13
    • 2016-11-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 2016-08-06
    相关资源
    最近更新 更多