【问题标题】:Why is PHP not seeing my query string?为什么 PHP 看不到我的查询字符串?
【发布时间】:2009-10-17 06:25:42
【问题描述】:

这个phpinfo() 说明了这个问题。

我正在向 URL 传递一个查询字符串:

?qwerty=asdfg

因此,我希望它列出这两个 PHP 变量:

_REQUEST["qwerty"] asdfg
_GET["qwerty"] asdfg

还有这个查询字符串:

_SERVER["QUERY_STRING"] qwerty=asdfg

但是,它不起作用。似乎根本没有设置这些变量。

我正在使用 lighttpd。这可能与问题有关,也可能无关,但我的 greengar.com-lighttpd.conf 看起来像这样,因为我在大多数域的页面上都使用 WordPress:

### Generated by Elliot
### Wordpress: http://www.greengar.com
url.rewrite += (
    "^/(wp-.+).*/?" => "$0",
    "^/(blog/wp-.+).*/?" => "$0",
    "^/(.*.php)" => "$0",
    "^/(.*.pdf)" => "$0",
    "^/(.*.png)" => "$0",
    "^/(.*.html)" => "$0",
    "^/(.*.ico)" => "$0",
    "^/(.*.gif)" => "$0",
    "^/(.*.txt)" => "$0",
    "^/(images).*/?" => "$0",
    "^/(sitemap.xml)" => "$0",
    "^/(xmlrpc.php)" => "$0",
    "^/(.+)/?$" => "/index.php/$1"
)

同样,我不确定这是否与问题有关。

我的问题是:为什么 PHP 看不到查询字符串?

我该如何解决?

这是一个正常的phpinfo(),它成功地看到了查询字符串。这是在另一台运行 Apache 的服务器上运行的。

【问题讨论】:

    标签: php parameters query-string


    【解决方案1】:

    http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModRewrite

    在底部:

    "如果您想将查询字符串 (?foo=bar) 传递到重写目标,您必须明确匹配它:"

    另一种方法是通过 $_SERVER['REQUEST_URI'] 读取它

    【讨论】:

    • 我花了几个小时学习正则表达式,以便我可以自信地做出匹配并传递查询字符串的更改。这里是:“^/(.*.php)(\?(.*))?” => "$0", (替换我问题中代码的第 6 行)
    • 相关:我在使用 Apache 时遇到了这个问题;结果发现 .htaccess 中的 RewriteBase 行搞砸了:你不能说RewriteBase /#comment
    【解决方案2】:

    只是检查,但应该是 $_SERVER["QUERY_STRING"] - 您的实际代码是否包含 $?

    【讨论】:

    • 是的,确实如此。我在问题中省略了 $ 因为 phpinfo() 将其省略了。
    猜你喜欢
    • 1970-01-01
    • 2013-01-03
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    相关资源
    最近更新 更多