Как ссылаться на текущий каталог из .htaccess с помощью mod_rewrite?

Я хочу использовать mod_rewrite для создания симпатичных URL-адресов, но имею одну версию файла .htaccess, которая может использоваться для любого пользователя на сервере.

Пока у меня есть стандартный довольно URL-адрес .htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$     /index.php/$1 [L]

В идеале, мне бы хотелось что-то похожее на

RewriteRule ^(.*)$     %{URL of this file directory}/index.php/$1 [L]

Эта документация заставила бы меня поверить, что я не хочу:

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

Я все равно получаю неправильный результат, независимо от того, помещаю ли я/перед индексом index.php в RewriteRule.

Это,

http://server/test/stream/stream

превращается в

http://server/index.php/stream

не

http://server/test/index.php/stream

когда файл .htaccess находится в/test/.

Ответ 1

Оказывается, что имеет значение, поставил ли я ведущий/перед index.php или нет. Оставляя это, script работает правильно. Я тестировал флаг R, который использовал физические каталоги при перенаправлении.

Ответ 2

У меня была аналогичная проблема, но я обнаружил, что просто выключение корня '/' привело к тому, что мой тестовый веб-сервер (xampp on windows) показал URL-адрес, похожий на:

http://localhost/C:/xampp/htdocs/sites/test/

Не идеально. Мое решение - использовать RewriteCond для извлечения пути из REQUEST_URI. Вот пример удаления нежелательных "index.php" с конца URL-адреса:

RewriteCond %{REQUEST_URI} ^(.*)/index.php$
RewriteRule index.php %1/ [r=301,L]

Примечание: знак процента в "% 1/", а не знак доллара.

% 1-% 9 получает шаблоны из последнего совпадающего RewriteCond, $1- $9 получает шаблоны из RewriteRule.

См: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond

Приветствия:)