Директива RewriteBase

Описание: Устанавливает базовый URL для преобразований в контексте каталога
Синтаксис: RewriteBase URL-path
Значение по умолчанию: Смотри использование для более подробной информации
Контекст: directory.htaccess
Разрешение: FileInfo
Статус: Расширение
Модуль: mod_rewrite

Директива RewriteBase устанавливает базовый URL для преобразований в контексте каталога. Директива RewriteBase используется в конфигурационных файлах каталогов .htaccess. Это будет работать локально, т.е., префикс локального каталога отбрасывается на этом этапе обработки и ваши правила преобразований работают только в оставшейся части. В конце он автоматически добавляется обратно к пути.

Настройка по умолчанию

RewriteBase physical-directory-path

Когда, для какого-нибудь нового URL происходит подстановка (преобразование), этот модуль должен заново вовлечь этот URL в обработку. Для того чтобы иметь возможность сделать это, нужно знать какие у него префикс или база URL. По-умолчанию этот префикс равен самому пути. Однако на некоторых сайтах URL'ы не прямо соответствуют физическим путям, поэтому вы должны использовать директиву RewriteBase для указания правильного префикса URL.

Если URL вашего сервера не соответствуют физическим путям к файлам, вы должны использовать RewriteBase в каждом из .htaccess файлов, где вы хотите использовать директивы RewriteRule.

Например, предположим следующий конфигурационный файл каталога:

#
#  /abc/def/.htaccess -- конфигурационный файл каталога /abc/def
#  Помните: /abc/def это физический путь /xyz, т.е., у сервера есть
#            директива 'Alias /xyz /abc/def' к примеру

#

RewriteEngine On

#  даем серверу знать что мы работаем через /xyz а не
#  через префикс физического пути /abc/def
RewriteBase   /xyz

#  теперь правила преобразований
RewriteRule   ^oldstuff\.html$  newstuff.html

В примере выше, запрос к /xyz/oldstuff.html корректно преобразуется в физический файл /abc/def/newstuff.html.

Для любителей поковыряться в Apache

Следующий список дает подробную информацию об этапах внутренней работы:

Запрос:
  /xyz/oldstuff.html

Внутренняя работа:
  /xyz/oldstuff.html     -> /abc/def/oldstuff.html  (per-server Alias)
  /abc/def/oldstuff.html -> /abc/def/newstuff.html  (per-dir    RewriteRule)
  /abc/def/newstuff.html -> /xyz/newstuff.html      (per-dir    RewriteBase)
  /xyz/newstuff.html     -> /abc/def/newstuff.html  (per-server Alias)

Результат:
  /abc/def/newstuff.html

Это может показаться очень сложным, однако это корректная внутренняя работа Apache. Из-за того что преобразование происходит целиком внутри сервера Apache, оно происходит очень быстро и не требует дополнительных накладных расходов.


.