Как ссылаться на текущий каталог из .htaccess, используя mod_rewrite? - PullRequest
12 голосов
/ 12 июня 2009

Я бы хотел использовать 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's directory}/index.php/$1 [L]

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

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

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

Это,

http://server/test/stream/stream

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

http://server/index.php/stream

не

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

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

Ответы [ 2 ]

10 голосов
/ 13 января 2012

У меня была похожая проблема, но я обнаружил, что простое отключение от корня '/' привело к тому, что мой тестовый веб-сервер (xampp на окнах) обслуживал 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

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

4 голосов
/ 12 июня 2009

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

...