Я хочу спросить, есть ли способ узнать, имеет ли экземпляр веб-сервера включенную перезапись URL. Мне нужно это для того, чтобы создать экземпляр правильного типа обработчика URL.
Теоретически вы знаете заранее, если вы его включили или нет, и можете использовать что-то для его настройки. Однако я хотел бы иметь возможность автоматически обнаруживать этот параметр во время выполнения.
Правило перезаписи URL будет очень простым:
^/(.*)$ => /bootstrap.php
Это гарантирует, что соответствующая строка присутствует в REQUEST_URI, но не загрязняет массив _GET.
Где мои исследования заняли меня до сих пор:
-
Apache.
На мой взгляд, Apache имеет очень причудливый подход, поскольку он устанавливает заголовокREDIRECT_SCRIPT_URI
для переписанных URL-адресов, но не для тех, которые не переписаны.
Например.http://host/ana/are/mere
будет переписана в index.php, поэтому вышеупомянутый заголовок будет присутствовать, ноhttp://host/
не будет перезаписана. -
Lighttpd.
Lighttpd с fast-cgi ведет себя нормально, установив заголовок REDIRECT_URI, если URL-адрес Rewrite включен для текущего хоста. Это надежно. -
Cherokee.
Что ж, для Cherokee нет метода, который я узнал, поскольку он использует (на мой взгляд) более сложный метод для перезаписи URL-адресов. (I.e., он называется внутренним перенаправлением – и процесс fcgi не знает, что запрос был перенаправлен)
Также я не тестировал другие http-серверы, как nginx, поэтому, если у кого-то есть какой-то вклад в этом вопросе, я бы с удовольствием его услышал.