Не получается редирект в htaccess

B
На сайте с 14.11.2010
Offline
54
615

Никак не могу найти решение проблемы с редиректом и склейкой.

Нужно сделать редирект через htaccess cо страницы типа

http://site.ru/old/index.php?itemid=185

на
http://site.ru/new/file.html

Такие методы не помогают:

redirect 301 /old/index.php?itemid=185 http://site.ru/new/file.html

RewriteEngine On

RewriteCond %{QUERY_STRING} =/old/index.php?itemid=185
RewriteRule ^$ /new/file.html? [R=301,L]

Ставил и в файле htaccess корня сайта и в папке старого движка /old/.

Ничего не меняется, страница site.ru/old/index.php?itemid=185 никуда не редиректится.

Спасибо

[Удален]
#1

а если index.php опустить в 1-м варианте?

J
На сайте с 20.02.2014
Offline
120
jkm
#2


RewriteEngine On
RewriteCond %{QUERY_STRING} =itemid=185
RewriteRule ^old/index.php$ /new/file.html? [R=301,L]

В первом варианте redirect 301 это директива mod_alias, который не позволяет делать сравнение с GET параметрами.

Если адресов для редиректа много, то можно сделать один общий RewriteRule для всех.

/old/index.php?itemid=100 => /new/file1.php

/old/index.php?itemid=200 => /new/file2.php

/old/index.php?itemid=300 => /new/file3.php


RewriteCond %{QUERY_STRING} ^itemid=(\d+)$
RewriteCond %1;100=/new/file1.php ^(\d+);\1=(.+) [OR]
RewriteCond %1;200=/new/file2.php ^(\d+);\1=(.+) [OR]
RewriteCond %1;300=/new/file3.php ^(\d+);\1=(.+)
RewriteRule ^old/index.php$ %2? [R=301,L]
B
На сайте с 14.11.2010
Offline
54
#3
web2033:
а если index.php опустить в 1-м варианте?

там есть варианты и с любым другим file234.php,

если просто открыть /?itemid=185 дублирует главную каталога /old/

B
На сайте с 14.11.2010
Offline
54
#4

jkm, спасибо огромное, ваш код сработал!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий