Редирект страниц форума

Unlock
На сайте с 01.08.2004
Offline
758
729

Коллеги, подскажите пожалуйста, как через htaccess сделать 301 редирект некоторых страниц форума, к примеру, /ru/forum/750848 на любой другой url?

С синтаксисом не могу разобраться.

Есть желание, - тысяча способов; нет желания, - тысяча поводов! /Петр-I/.
edogs software
На сайте с 15.12.2005
Offline
775
#1

RewriteEngine on

RewriteCond %{QUERY_STRING} ^t=750848$

RewriteRule ^.*$ http://www.ya.ru/? [R=301]

Unlock:
Ааа, дурья моя башка. :) Спасибо большое!
А зачем ? после адреса страницы на которую надо отправить?

Если ? там не будет, то редирект будет на ya.ru?t=750848, а не просто на ya.ru

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
Unlock
На сайте с 01.08.2004
Offline
758
#2

Ааа, дурья моя башка. :) Спасибо большое!

А зачем ? после адреса страницы на которую надо отправить?

Unlock
На сайте с 01.08.2004
Offline
758
#3

Апну тему. А как подобный редирект реализовать:

forumdisplay.php?f=29&order=desc&page=2 на forumdisplay.php?f=29&page=2

Что-то не получается, тут же два параметра, просто

%{QUERY_STRING} ^f=([0-9]+).*$ нельзя...

Коллеги, хелп ми плиз. :)

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

Вместо одного условия поставьте два (двумя строками)

RewriteCond %{QUERY_STRING} t=([0-9]+) [NC]

RewriteCond %{QUERY_STRING} page=([0-9]+) [NC]

RewriteRule ^.*$ http://%{HTTP_HOST}/$0?t=%1&page=%2 [R=301,L]

Можно и одной строкой, но это только если уверены что порядок следования параметров будет всегда таким (всегда сначала одни, например f, а затем page)

Надежней двумя строками.

Редирект произойдет если выполнятся условия одновременно двух строк.

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

Что-то здесь не так. t не совсем понятно откуда взялось. :) Но это ладно. Ведь по такой схеме как странно получается.

forumdisplay.php?f=29&order=desc&page=2

forumdisplay.php?f=29&page=2

Оба варианта подходят. А мне надо чтобы при обращению по первому типу адреса, редиректило на второй вариант.

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

t я по ошибке вместо f использовал

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

Могу предложить два проверенных варианта с одной строкой условия

Удаление из строки запроса всех параметров кроме f и page (в том случае если f раньше page и между ними есть другие параметры или один параметр)

RewriteCond %{QUERY_STRING} f=([0-9]+).+&page=([0-9]+)

RewriteRule ^.*$ http://%{HTTP_HOST}/$0?f=%1&page=%2 [R=301,L]

и вариант, удаляющий параметр order с любым значением, и сохраняющий все остальные параметры в строке запроса:

RewriteCond %{QUERY_STRING} (.*)&order=[^&]+(.*)

RewriteRule ^.*$ http://%{HTTP_HOST}/$0?%1%2 [R=301,L]

[NC] можно добавлять чтоб работало независимо от регистра (одинаково для page и PAGE например), чеще всего это не нужно

Unlock
На сайте с 01.08.2004
Offline
758
#7

Нельзя ли как-то так сделать запись:

RewriteRule     ^forumdisplay.php?f=([0-9]+)&page=([0-9]+)$ /forumdisplay.php?f=$1&order=desc&page=$2? [R=301,L]

Немного смущают варианты предложенные, не знаю чем. Нет конкретики, в каком точно случае (адрес вида forumdisplay.php?f=29&order=desc&page=2) перенаправлять.

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

RewriteRule не видит то, что в адресе находится после вопросительного знака (не видит строки запроса, параметров)

Так что одной строкой не получится.

Оба варианта будут перенаправлять для всех страниц c подходящей под шаблон строкой запроса.

Если у Вас конкретно нужно подобное только для страницы forumdisplay.php то можно конкретизировать ее, например так

RewriteCond %{QUERY_STRING} (.*)&order=[^&]+(.*)

RewriteRule ^forumdisplay\.php$ http://%{HTTP_HOST}/$0?%1%2 [R=301,L]

У Вас в этом случае из адреса типа

forumdisplay.php?f=29&order=desc&page=2

уберется все начиная с "&order=" и до первого следующего символа & (не включая его)

Вместо $0 подставится вся строка из первой части RewriteRule (все что находится между ^$)

Можете просто написать вместо $0 значение forumdisplay.php (чтоб понятнее было Вам, серверу без разницы в данном случае)

Вместо %1 и %2 сервер подставит значения из RewriteCond соответствующие первым и вторым скобкам соответственно (в данном случае все то что находится в начале строки запроса и что в конце, до параметра order и после него).

Unlock
На сайте с 01.08.2004
Offline
758
#9

Спасибо. Вроде бы работает как надо. Надеюсь не выскочит потом неожиданно проблема в другом месте.

Unlock
На сайте с 01.08.2004
Offline
758
#10

Спасибо. Вроде бы работает как надо. Надеюсь не выскочит потом неожиданно проблема в другом месте.

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