Mod_Rewrite с перенаправлением относительного пути - PullRequest
4 голосов
/ 01 февраля 2012

У меня есть это правило в файле .htaccess, расположенном в каталоге с именем clips/:

RewriteRule ^mlk/?$ segment/index.php?clip=1 [R=301,QSA,L]

Я имею в виду, что когда кто-то посещает http://example.local/clips/mlk, они перенаправляются на http://example.local/clips/segment/index.php?clip=1

Что на самом деле происходит, так это то, что когда кто-то посещает example.local/clips/mlk, они перенаправляются на example.local/var/www/example/clips/segment/index.php?clip=1

Я не уверен, почему он это делает. Если я изменю правило перезаписи на это:

RewriteRule ^mlk/?$ /segment/index.php?clip=1 [R=301,QSA,L]

Пользователь перенаправлен на example.local / сегмент / index.php? Clip = 1, который по-прежнему неверен. Я не хочу указывать абсолютный путь в случае перемещения этих файлов по дереву каталогов сайта. Как я могу заставить это работать относительно, а не абсолютно?

1 Ответ

6 голосов
/ 02 февраля 2012

Попробуйте добавить директиву RewriteBase, как показано ниже

RewriteEngine On
RewriteBase /clips/

RewriteRule ^mlk/?$ segment/index.php?clip=1 [R=301,QSA,L]

EDIT

но есть ли способ заставить это работать без использования директивы RewriteBase

Вы также можете попробовать

RewriteEngine On


RewriteCond %{REQUEST_URI} ^(/[^/]+/) [NC] 
RewriteRule ^mlk/?$ http://%{HTTP_HOST}%1segment/index.php?clip=1 [R=301,QSA,L]
...