Я заметил, это иногда (особенно, где mod_rewrite не доступен), эта схема пути используется:
http://host/path/index.php/clean_url_here
--------------------------^
Это, кажется, работает, по крайней мере, в Apache, где index.php
назван, и можно запросить /clean_url_here
часть через $_SERVER['PATH_INFO']
. PHP даже отчасти рекламирует эту функцию. Кроме того, например, платформа CodeIgniter использует эту технику в качестве значения по умолчанию для их URL.
Вопрос: Насколько надежный техника? Есть ли ситуации, где Apache не звонит index.php
но попытки разрешить путь? Что относительно lighttpd, nginx, IIS, AOLServer?
Вопрос о ServerFault? Я думаю, что это имеет больше, чтобы сделать с использованием этой функции в коде PHP. Поэтому я спрашиваю здесь.
Приложение: Как предложено VolkerK, разумное расширение этого вопроса: Как программист может влиять на существование $_SERVER['PATH_INFO']
на различных типах сервера?
Я думаю, что это вопрос, который одинаково подходит для stackoverflow и serverfault. Например. Я, как разработчик, могу только сказать вам, что pathinfo заслуживает доверия, как и любой вводимый пользователем (что означает, что он может содержать практически что угодно), и ваш сценарий может получать или не получать его в зависимости от версии и конфигурации веб-сервера:
Apache: AcceptPathInfo
IIS: например AllowPathInfoForScriptMappings и другие
и так далее и так далее ...
Но администраторы серверов, возможно, могут сказать вам, какие настройки вы можете ожидать «в реальном мире» и почему эти настройки являются предпочтительными.
Итак, возникает вопрос: насколько сильно вы (или ожидаемая база пользователей) можете влиять на конфигурацию сервера.
AcceptPathInfo должен быть включен, чтобы это работало.
Могут существовать наивные сценарии (например, автоматическое связывание), которые не распознают формат этого URL. Тем самым снижается вероятность создания ссылок на ваш контент.
Поскольку для этих задач характерны самодельные шаблоны регулярных выражений, вероятность неудачи вполне реальна.
Технически с этими URL-адресами все в порядке. С точки зрения SEO они «менее совершенны».
По моему опыту я бы сказал, что PATH_INFO
обычно доступен на обычном веб-хостинге. среды и настройки сервера - даже в IIS - но в редких случаях это не так. При создании приложения, которое предполагается развернуть на максимально возможном количестве платформ, я бы не стал доверять path_info на жестко заданном уровне.
По возможности я пытаюсь создать функцию-оболочку build_url ()
, которая, в зависимости от настройки конфигурации, использует либо
www.example.com/index. php? clean_url = clean_url_here
www.example.com/index.php/clean_url
www.example.com/clean_url
и используйте его во всех URL-адресах приложения. испускает.