2010-04-14 4 views
6

я заметил, что иногда (особенно там, где mod_rewrite не доступен) используется такая схема пути:Насколько надежны URIs как /index.php/seo_path

http://host/path/index.php/clean_url_here 
--------------------------^ 

Это кажется работать, по крайней мере, Apache, где вызывается index.php, и можно запросить часть /clean_url_here через $_SERVER['PATH_INFO']. PHP даже kind of advertises эта функция. Кроме того, например, структура CodeIgniter использует этот метод по умолчанию для своих URL-адресов.

Вопрос: Насколько надежна техника? Существуют ли ситуации, когда Apache не вызывает index.php, но пытается разрешить путь? Что относительно lighttpd, nginx, IIS, AOLServer?

Вопрос о ServerFault? Я думаю, что это больше связано с использованием этой функции внутри PHP-кода. Поэтому я прошу здесь.

Добавление: Как было предложено VolkerK, разумное расширение на этот вопрос: Как программист влияние существование $_SERVER['PATH_INFO'] на различных типах серверов?

ответ

4

Я думаю, что это вопрос, который одинаково подходит для stackoverflow и serverfault. Например. Я как разработчик могу только сказать вам, что pathinfo столь же заслуживает доверия, как и любой пользовательский ввод (что означает, что он может содержать практически все), и ваш скрипт может получать или не получать его в зависимости от версии и конфигурации веб-сервера:

Apache: AcceptPathInfo
IIS: напр. AllowPathInfoForScriptMappings и другие
и так далее и на ...

Но админы сервера, возможно, может сказать вам, какие настройки вы можете ожидать «в реальном мире» и почему предпочтительны те настройки.
Так возникает вопрос: какое влияние у вас (или на ожидаемую базу пользователей) на конфигурацию сервера.

+0

Спасибо за ссылки Apache и IIS. После немного Googling (основанный на недавно полученных знаниях о AcceptPathInfo) я нашел решение для nginx: http://kbeezie.com/view/php-self-path-nginx/ – Boldewyn

0

Из моего опыта я бы сказал, что PATH_INFOявляется обычно доступны в обычных веб-хостинга средах и серверных установок - даже на IIS - но в редких случаях, это не так. При создании приложения, которое предполагается развертывать на максимально возможном количестве платформ, я бы не стал доверять path_info на жестком уровне.

Всякий раз, когда я могу, я пытаюсь построить функцию build_url() оболочку, которая, в зависимости от настройки конфигурации, использует либо

  • необработанный URL www.example.com/index.php?clean_url=clean_url_here
  • path_info механизм www.example.com/index.php/clean_url
  • mod_rewrite www.example.com/clean_url

и использовать его во всех URL-адресах, из которых исходит приложение.

+0

Абстракция всегда хорошая идея , согласовано. Тем не менее, я хотел бы конкретно узнать о опыте PATH_INFO и наличии этой функции. – Boldewyn

0

Могут быть наивные сценарии (например, автосвязы), которые не распознают формат этого URL-адреса.Тем самым уменьшается вероятность того, что ссылки на ваш контент будут созданы.
Поскольку для этих задач характерны обычные шаблоны регулярных выражений, вероятность неудачи вполне реальна.

Технически эти URL-адреса в порядке. SEO-мудрый, они «менее совершенны».

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

  • Нет связанных вопросов^_^