2009-10-17 2 views
3

Этот phpinfo() демонстрирует проблему.Почему PHP не видит строку запроса?

Я передавая 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.

ответ

12

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

На дне:

«Если вы хотите передать строку запроса (Foo = бар?) К месту назначения переписывания, вы должны явно соответствовать его:»

И альтернативе читать его через $ _SERVER ['REQUEST_URI']

+0

+1 по договоренности! : D – mauris

+0

Я потратил пару часов на изучение регулярных выражений, чтобы я мог уверенно внести изменения, которые будут совпадать и пройти вдоль строки запроса. Здесь это: «^/(. *. Php) (\? (. *))?" => «$ 0», (замените строку 6 кода в моем вопросе) – Elliot

+0

СООТНОШЕНИЕ: У меня возникла проблема с Apache; оказалось, что строка RewriteBase в .htaccess испортила это: вы не можете сказать 'RewriteBase/# comment' –

0

Просто проверить, но это должно быть $ _SERVER ["QUERY_STRING"] - ваш фактический код включает $?

+0

Да, это так. Я оставил $ в вопросе, потому что phpinfo() оставляет его. – Elliot

Смежные вопросы