2010-01-11 6 views
0

Я пытаюсь получить «чистые» URL-адреса стиля PathInfo с параметрами строки запроса, работающими на PHP 5.3 и IIS 5.1 с использованием FastCGI. Я обнаружил, что я могу использовать:Чистые URL-адреса PathInfo и строки запроса в IIS 5.1 и PHP 5

() http://www.example.com/index.php?/path/to/foo/

но не:

() http://www.example.com/index.php/path/to/foo/ (? Обратите внимание на недостающую )

Какой ISN 't большая проблема, пока я не хочу смешивать URL-адреса с строкой запроса, например:

() http://www.example.com/index.php?/path/to/foo/?color=blue&size=small

Это делает мои $ _GET выглядеть:

Array 
(
    [/myapp/foo/bar?colour] => blue 
    [size] => small 
) 

Есть ли способ, чтобы получить схему URL, как (4) ниже, чтобы работать, и с $ _GET быть правильно заполняются на IIS 5.1 ?

() http://www.example.com/index.php/path/to/foo/?color=blue&size=small

P.S. - Я помню, что смог сделать это раньше, но подозреваю, что я использовал Apache в то время, а не IIS. Невозможно использовать Apache для этого. Однако на рабочем сервере есть IIS7 (у меня только IIS 5.1 на моей машине).

ответ

0

Для (3) вам просто нужно обработать строку запроса как единый фрагмент текста. Вы не должны использовать $_GET - вместо этого вы должны использовать переменную окружения QUERY_STRING. Вы должны получить /path/to/foo/?color=blue&size=small.

Для (4) необходимо объединить переменные окружения и QUERY_STRING, соединенных с ? и использовать это значение. Опять же, вы должны получить /path/to/foo/?color=blue&size=small. Это связано с тем, что PATH_INFO имеет /path/to/foo и QUERY_STRING имеет color=blue&size=small.

+0

Спасибо! Это отлично работает. Для IIS5, поскольку для этого требуется «index.php?» а не просто «index.php», мне также нужно было разделить на «?», а затем использовать parse_str для результата. –