Почему $ _SERVER ['PATH_TRANSLATED'] повторяется? - PullRequest
4 голосов
/ 14 февраля 2010

Я пытаюсь создать среду MVC, когда заметил, что переменная $ _SERVER ['PATH_TRANSLATED'] делает это:

[PATH_INFO] => / test / test2 / test3
[PATH_TRANSLATED] => перенаправление: /index.php/test/test2/test3/test2/test3

Это когда я обращаюсь к файлу PHP по http://domain.tld/test/test2/test3
Обратите внимание, как это повторяется после / test /

Это мой .htaccess для переписывания:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

Есть идеи? Я попытался изменить правило RewriteRule, но ничего не изменилось. Однако эта переменная не так важна для того, что я пытаюсь сделать, мне интересно, почему это происходит, и если я что-то неправильно настроил.

Информация о сервере:
Apache / 2.2.3
PHP 5.3.1

Редактировать: Эта переменная не повторяется при Lighttpd, так как сообщает:

[PATH_INFO] => / test / test2 / test3
[PATH_TRANSLATED] => / home / kramer / public_html / test / test2 / test3

Так что я предполагаю, что это как-то связано с Apache. Я также попробовал FastCGI под Apache, и он дал тот же повторяющийся результат.

1 Ответ

3 голосов
/ 15 февраля 2010

Если вы используете mod_rewrite, то чтение значения PATH_TRANSLATED не будет иметь смысла в вашем скрипте, так как оно будет указывать на файл или путь несуществования. Вы должны использовать PATH_INFO в вашем index.php, чтобы узнать URI, запрошенный пользователем.

Например, вы можете взглянуть на Класс CodeIgniter Router. CodeIgniter может использовать несколько способов для получения параметров URI: PATH_INFO, QUERY_STRING, REQUEST_URI и ORIG_PATH_INFO.

Если вам все еще любопытно странное поведение вашего Apache, возможно, копание в журнале доступа покажет некоторую подсказку для преступника. Однако, если вы не используете эту переменную, просто забудьте об этом. Он служит другой цели, и ваш MVC не будет его использовать.

...