htaccess редирект

dspu
На сайте с 10.05.2006
Offline
268
838

Как средиректить страницу site.ru/d/1.html?id=123 на site.ru/d/2.html?id=123

RewriteEngine on

RewriteRule ^(.+)/d/1.html(.+)id=123$ /d/2.html?id=123 [R=301,L]

что-то не работает

gormarket
На сайте с 29.12.2010
Offline
47
#1


RewriteCond %{QUERY_STRING} ^id=123$
RewriteRule ^d/1\.html$ d/2.html [R=301,L]

Если вставить только вторую строку, то будет редирект при любой строке запроса, а не только "id=123"

Товары и цены в магазинах Вашего города: Городской рынок (http://gormarket.ru/)
Ragnarok
На сайте с 25.06.2010
Offline
239
#2

RewriteEngine on

RewriteRule ^d/1.html?id=([0-9]*)$ d/2.html?id=$1 [L]

//TODO: перестать откладывать на потом
dspu
На сайте с 10.05.2006
Offline
268
#3

строка запроса не считается урлом, вот в чем моя ошибка была :)

dspu добавил 28.04.2011 в 20:02

gormarket, спасибо, проблема решена

только адрес назначения надо указывать с http:// иначе в адрес вклинивается серверный путь

siv1987
На сайте с 02.04.2009
Offline
427
#4
только адрес назначения надо указывать с http:// иначе в адрес вклинивается серверный путь

gormarket, все таки %{HTTP_HOST}? :)

[umka]
На сайте с 25.05.2008
Offline
456
#5

Да шо вы заладили с этим %{HTTP_HOST} :D

Надо просто слэш в начале ставить, чтоб путь не вклинивался.

Типа так:

RewriteRule ^d/1\.html$ /d/2.html [R=301,L]

Лог в помощь!
gormarket
На сайте с 29.12.2010
Offline
47
#6
umka:
Да шо вы заладили с этим %{HTTP_HOST}
Надо просто слэш в начале ставить, чтоб путь не вклинивался.
Типа так:
RewriteRule ^d/1\.html$ /d/2.html [R=301,L]

Для того чтоб путь не вклинивался, есть универсальное решение

всего одна строка для всего .htaccess

RewriteBase /

(ну для некоторых случаев вместо / другое значение)

А вообще я считаю (это мое личное мнение) что две строки

RewriteEngine On

RewriteBase /

просто обязаны присутствовать среди первых строк .htaccess, если в нем есть RewriteRule

Тогда не нужно начинать строку подстановки с /

siv1987:
gormarket, все таки %{HTTP_HOST}?

Единстрвенный случай, когда при использовании

RewriteBase /

нужен %{HTTP_HOST} в строке подстановки, это когда редирект (именно редиркет внешний, а не реврайт) идет на каталог, в котором находится данный .htaccess (без указания имени файла или подкаталога)

Тогда в строке подстановки по идее ничего не нужно ставить (система сама добавит протокол+домен+RewriteBase), но оставлять строку подстновки пустой не позволяет синтаксис RewriteRule и придется в этом случае вставлять в строку подстановки полный путь "http://%{HTTP_HOST}/" (для корневого каталога сайта)

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