301 редирект и циклическая адресация — как решить проблему?

Дело обстоит так.
На сайте все страницы подключаются в index.php
параметры передаются через GET. То есть www.site.ru/index.php?page=news .
Задача была сделать ЧПУ типа www.site.ru/news/

Это я сделал добавлением в .htaccess строки:
RewriteRule ^(record|feedback|personal|licenses|work)/?$ index.php?page=$1 [L,NC]

Но теперь еще нужно сделать 301 редирект со старых адресов на новые. То есть если я напишу в адресной строке www.site.ru/index.php?page=news то он перенаправлял на www.site.ru/news/

НО
Так как www.site.ru/index.php?page=news и www.site.ru/news/ это одна и та же страница, то выходит, что страница будет перенаправляться сама на себя.

Что нужно сделать чтобы при запросе www.site.ru/index.php?page=news он переходил на www.site.ru/news/

Как это можно организовать? Ну голова кипит.

Нигде ответа на вопрос не нашел, и надеюсь на адекватное и умное сообщество Хабра.
  • Вопрос задан
  • 6335 просмотров
Пригласить эксперта
Ответы на вопрос 4
@ShamblerR
Исключите символом ! страницы при которых редирект не будет работать, в данном примере я исключил файл index.php если вам требуется более сложная конструкция урла, то RewriteCond %{REQUEST_URI} !УРЛ_ПРИ_КОТОРОМ_РЕДИРЕКТ_ЗАПРЕЩЕН
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !index.php$
RewriteRule ^(record|feedback|personal|licenses|work)/?$ index.php?page=$1 [L,NC]
Ответ написан
Комментировать
metamorph
@metamorph
Нифига не понял.

На старые адреса ставите обычный редирект, грубо говоря, если польхователь откроет /index.php?page=news то его перебросит (со сменой адреса в адресной строке) на /news

Запросы вида /news обрабатываете через точку входа (index.php), без редиректа.

В каком месте тут может возникнуть циклическая переадресация-то?
Ответ написан
iDennis
@iDennis
может всё сделать из php? Например проверять $_SERVER['REQUEST_URI'] и делать редирект. или почитать тут .
Ответ написан
Комментировать
@IFK
Что-то в этом роде сделай:
$ref=$_SERVER['QUERY_STRING'];
if ($ref!='') $ref='?'.$ref;
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://newdomain.ru/'.$ref);
exit();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы