Просто хочу что-то подтвердить. Из того, что я собираю, как работает mod_rewrite, Apache получает URL-адрес и сразу же применяет mod_rewrite (не < каталог >) в httpd.conf, затем переписывает mod-rewriting для каждого каталога, а затем перезапускает процесс с новым URL-адресом, если любые изменения сделаны. @ Отличный ответ JonLin на this question гласит, что когда ваше правило для каждой директории специфицирует абсолютную замену (то есть, начиная с косой черты), предполагается, что это относится к DocumentRoot, который я получаю. Но относительных замен (не слэш) Джон затем говорит:.mod_rewrite поведение, когда нет rewriteBase
он основан на директории, что правило находится в Так, если
RewriteRule^Foo $ bar.php [L]
находится в «корне», и вы переходите к http://example.com/foo, вам предоставляется http://example.com/bar.php. Но если это правило находится в каталоге «subdir1», и вы переходите на http://example.com/subdir1/foo, вы получаете сообщение http://example.com/subdir1/bar.php. и т. д. Это иногда срабатывает, а иногда и нет, как говорит документация, предполагается, что он необходим для относительных путей, но большую часть времени он работает. За исключением случаев, когда вы перенаправляете (используя флаг R или неявно, потому что у вас есть хост http: // в целевом элементе вашего правила). Это означает, что это правило:
RewriteRule^Foo $ bar.php [L, R]
, если он находится в директории "subdir2", и вы идете в http://example.com/ subdir2/foo, mod_rewrite допустит относительный путь как путь к файлу вместо URL-пути, а из-за флага R вы получите перенаправление на что-то вроде: http://example.com/var/www/локальный/HTDOCS/subdir1.
Как Джон объясняет в последнем бите, когда редирект будет происходить и когда нет никакого RewriteBase, строки, предназначенной в качестве путь_к_файла добавляемых к базовому адресу сайта, чтобы создать фальшивый URL. Но только для подтверждения, даже в первом случае Джон упоминает, т.е. не фактическое перенаправление, замещенная строка отправляется обратно в код приема URL-адреса Apache, перезагружая весь процесс, правильно? Диаграмма на this page of the spec, по-видимому, подразумевает, что до тех пор, пока никакие правила не вносят изменения, процесс продолжает перезапуск. Эти случаи, не связанные с переадресацией, похоже, были временем, когда было бы целесообразно прикрепить путь к файлу прямо из корня файловой системы в каталог htaccess в начале подстановки. Но как это превращается в правильный URL-адрес, как ожидалось, кодом доступа к URL-адресу - делает ли http://localhost предпочтительным? Я думаю, что это сделает все относительно документа, а не фактического корня файловой системы.
Спасибо!