PHP PATH_INFO не может быть установлен после перезаписи - PullRequest
1 голос
/ 14 февраля 2012

Я работаю на сервере общего хостинга, настраивая что-то, что нормально работало на моем локальном хосте, и мне любопытно, что вызывает такое поведение.Я перенаправляю URL с Apache и mod_rewrite на фронт-контроллер с:

RewriteEngine On
RewriteCond %{REQUEST_URI} \..+$
RewriteCond %{REQUEST_URI} !\.html$
RewriteRule .* - [L]
#Redirect to front controller
RewriteRule ^(.*)$ index.php/$1 [QSA,L]

На index.php у меня есть простая настройка проверки для целей отладки:

if(isset($_SERVER['PATH_INFO']))  
{  
    echo $_SERVER['PATH_INFO'];  
}
else  
{  
    echo "No Path";  
}  
die;

Visiting http://example.com/testing выводит «Нет пути»
Посещение http://example.com/index.php/testing выводит / тестирует

Это перенаправление работало, как и предполагалось, на моем локальном хосте с http://example.com/testing выводом «/ testing»

Кто-нибудь знает, что может быть причиной этого?Есть ли более общий способ выполнения этого перенаправления, менее подверженный выдаче с хоста на хост?

РЕДАКТИРОВАТЬ:

Вывод $_SERVER['PATH_INFO'], $_SERVER['ORIG_PATH_INFO'], $_SERVER['PHP_SELF'], $_SERVER['REQUEST_URI'] соответственно показывает:

path:
orig: /testing
self: /index.php
uri: /testing

Какая обработка выполняется, чтобы вызвать это?Является ли ORIG_PATH_INFO более надежным?Также кажется, что REQUEST_URI также точен, это более подходящая переменная?

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012

URL является важной частью.Если вы обращаетесь к нему через http://example.com/testing, то между именем файла и строкой запроса ничего нет.

Содержит любую предоставленную клиентом информацию о путевом имени, сопровождающую фактическое имя файла сценария, но предшествующую строке запроса, если она доступна.Например, если доступ к текущему сценарию осуществляется через URL http://www.example.com/php/path_info.php/some/stuff?foo=bar,, то $ _SERVER ['PATH_INFO'] будет содержать /some/stuff.

-> http://www.php.net/manual/en/reserved.variables.server.php

1 голос
/ 07 июня 2012

У меня была такая же проблема после того, как я развернул свой код на общем сервере.Я написал скрипт для просмотра всех глобальных объектов и обнаружил, что

ORIG_PATH_INFO

содержит информацию, которая раньше была в PATH_INFO в моем локальном окне разработчика.

У меня уже былфайл конфигурации конкретного хоста.Все, что мне нужно было сделать, это добавить новый параметр, специфичный для хоста (PathInfoName).На моем локальном компьютере установлено значение PATH_INFO, а на общем хосте - ORIG_PATH_INFO.

Исправлена ​​ошибка.

...