Делаем внешний редирект.Флаг .htaccess NS не работает.Как добиться подобных результатов? - PullRequest
0 голосов
/ 10 апреля 2011

Я переместил сайт в подкаталог root, но хочу, чтобы url продолжал работать.Я уже достиг этого, используя следующее правило в htaccess:

 RewriteCond %{REQUEST_URI} !^/subdir  [NC]
 RewriteRule ^(.*)$ /subdir/$1 [L,NS]

Теперь проблема в том, что к данной странице (скажем, index.php) можно получить доступ двумя URL-адресами:

 mysite.com/index.php
 mysite.com/subdir/index.php

Я не хочу, чтобы это происходило во избежание путаницы среди пользователей, а также во избежание повторной индексации одного и того же контента поисковыми системами.Я не слишком хорош с htaccess, но я сделал внешнее перенаправление на свой сайт, создав другое правило в htaccess:

RewriteRule ^subdir/(.*)$ http://mysite.com/$1 [L,R,NS,NC]

Но проблема в том, что это создает бесконечный цикл через подзапросы,Обычный запрос приводит к подзапросу для извлечения страницы из подкаталога «subdir», но этот подзапрос заставляет второе правило выполнить внешнее перенаправление на мой сайт, снова запуская цикл.Флаг NS, как я выяснил позже, бесполезен в случае внешних перенаправлений.Так что я хотел спросить, как мне разорвать этот цикл?ИЛИ как перенести запрос, сделанный с помощью «mysite.com/subdir/index.php», на «mysite.com/index.php"?

»

1 Ответ

0 голосов
/ 10 апреля 2011

Первое правило, которое вы опубликовали, является правильным

RewriteCond %{REQUEST_URI} !^/subdir  [NC]
RewriteRule ^(.*)$ /subdir/$1 [L,NS]

Второе правило, которое вам придется изменить.Вы не должны переписывать, а перенаправлять (предпочтительно 301).

Это полезно как для получения желаемых результатов, так и для того, чтобы поисковые системы не проиндексировали ваш контент дважды.редирект фактически отправляет http-ответ, в котором говорится, что ресурс перемещен, но это не создает внутренний цикл.

...