2009-06-12 2 views
11

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

До сих пор у меня есть стандартный довольно 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] 

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

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

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

Это

http://server/test/stream/stream

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

http://server/index.php/stream

не

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

когда файл .htaccess в/тест /.

+0

Также https://stackoverflow.com/q/4704508/632951 – Pacerier

ответ

2

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

+0

Да, ** но ** [оставляя его вы полагаетесь на значение rewritebase] (https://stackoverflow.com/a/11443194/632951), который ** не может ** быть вашей родительской папкой htaccess. В любом случае, оставляя это, это хакерское решение, а не реальное решение. – Pacerier

8

У меня была аналогичная проблема, но обнаружил, что просто убрав корень «/» в результате моего веб-тестовом сервере (XAMPP на окнах) отбывал URL похож на:

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

Не идеально. Мое решение - использовать RewriteCond для извлечения пути из REQUEST_URI. Вот пример для удаления нежелательных «index.php» S от конца 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

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

Смежные вопросы