2012-03-05 2 views
0

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

RewriteRule ^(.*)/?$ ../ [R] 

, но при этом отображается ошибка и действительная системная дорожка!

ответ

3

Наиболее легко осуществляется с помощью абсолютного HTTP URL:

# We assume this is in .htaccess inside the directory to be redirected 
RewriteEngine On 
RewriteCond %{REQUEST_URI} !^/parent 
RewriteRule ^(.*)?$ http://%{HTTP_HOST}/parent [R=301,QSA,L] 

Примечание, QSA был добавлен, чтобы сохранить строку запроса, но это может быть удален, если вы не хотите этого.

+0

Спасибо, что вроде работает, хотя использует абсолютные URL-адреса. Кроме того, поскольку родительский каталог также использует переписывание URL-адресов и использует RewriteRule^(. *) /? $ Index.php? Where = $ 1 [QSA, L], когда URL-адрес перенаправлен тем, что вы написали, он перенаправляется на http : // host/parent /? where = child – DMIL

+0

@DMIL RewriteCond, добавленный выше, чтобы заблокировать цикл перезаписи. –

+0

Не работает с RewriteCond, работает без строки RewriteCond, хотя абсолютные URL-адреса являются большой проблемой. Кроме того, работает по-другому, если конечная косая черта дочернего объекта опущена, тогда он показывает перенаправление от родителя. ** Изменить: На самом деле кажется, что строка RewriteCond не имеет никакого эффекта. – DMIL

0

Вы можете использовать RedirectMatch:

RedirectMatch 301 ^/child/?$ http://example.com/ 
+0

Куда бы я положил это? В родительском каталоге .htaccess? Где именно, до или после правил перезаписи для родительского каталога? Кроме того, он не работает. URL-адрес, к которому он перенаправляется, относится к http: // hostname/parent/child вместо http: // hostname/parent – DMIL

+0

Он должен находиться в текущем каталоге. Не имеет значения, где находится файл .htaccess. –

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