2012-02-01 4 views
3

У меня есть это правило в файле .htaccess находится в директории с именем clips/:mod_rewrite с относительным путем Перенаправлением

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 клип = 1, который по-прежнему неправильно?. Я не хочу указывать абсолютный путь в случае, если эти файлы перемещаются по дереву каталогов веб-сайта. Как я могу заставить это работать относительно, а не абсолютно?

ответ

3

Попробуйте добавить директиву 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] 
+1

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

+0

Я изменил условие на 'RewriteCond% {REQUEST_URI}^(/ [^ /] +/([^ /] + /) *) [NC]', и теперь он отлично работает с вложенными каталогами. Спасибо. –

+1

Последнее не работает, когда требуется, чтобы правила работали независимо от того, где (и насколько глубоко) в пространстве имен находится каталог. –