301 редирект в зависимости от параметра

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем greatilya, 29 окт 2009.

Статус темы:
Закрыта.
  1. greatilya

    greatilya Создатель

    Регистр.:
    21 май 2009
    Сообщения:
    35
    Симпатии:
    3
    не могу никак найти решение, уже настроил mod_rewrite и т.д. ... но никак не могу сделать маленький ньюанс, надо перенести на новую версию сайта страницу со старого.

    сделать нужно желательно с помощью .htaccess

    Необходимо сделать перенаправление из:
    Код:
    http://domain.ru/index.php?page=385
    в:
    Код:
    http://domain.ru/index.php?page=386
    Пробовал так:
    Код:
    RedirectMatch 301 /index.php?page=385$ http://domain.ru/index.php?page=386
    не получается (((...
     
  2. Darkmind

    Darkmind SNMP maniac

    Регистр.:
    31 май 2006
    Сообщения:
    183
    Симпатии:
    76
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index.php?page=385$ /index.php?page=386 [NC,L,R=301]

    Redirect и RedirectMatch в модуль mod_rewrite не входят, это упрощённые RewriteRule.
     
  3. greatilya

    greatilya Создатель

    Регистр.:
    21 май 2009
    Сообщения:
    35
    Симпатии:
    3
    в корень сайта положил файл .htaccess
    в котором написал:
    Код:
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index.php?page=385$ /index.php?page=386 [NC,L,R=301]
    больше в файле ничего нет.

    итог: никакой реакции

    вот для теста закинул сюда http://bukvak.ru/index.php?page=385
    можете сравнить со страницей 386

    я всё правильно сделал? может где-то есть хитрость?
     
  4. Darkmind

    Darkmind SNMP maniac

    Регистр.:
    31 май 2006
    Сообщения:
    183
    Симпатии:
    76
    Тысяча извинений, я сказочно протупил. В RewriteRule нельзя использовать параметры GET, ляпнул автоматически.

    Код:
    RewriteEngine On
    RewriteBase /
    RewriteCond %{QUERY_STRING} ^page=385$
    RewriteRule index.php index.php?page=386 [L,NC,R=301]
    
     
  5. greatilya

    greatilya Создатель

    Регистр.:
    21 май 2009
    Сообщения:
    35
    Симпатии:
    3
    Вам явно не за что извиняться, как минимум вы мне помогаете....

    Всё установил, проверил, работает!!! ))))) спасибо большое.... я очень много времени потратил на эту тонкость с GET...

    Добавлено через 21 минуту
    Код:
    RewriteEngine On
    
    RewriteBase /
    RewriteCond %{QUERY_STRING} ^page=7$
    RewriteRule index.php /page31/o_studii/ [L,NC,R=301]
    
    RewriteBase /
    RewriteRule ^page([0-9]*)/(.*)/ /index.php?page=$1
    итого надо чтобы заходя под адресом index.php?page=7
    попадали в page31/o_studii/
    сейчас же попадает в page31/o_studii/?page=7

    подскажите если можно, как это решить?
     
  6. Darkmind

    Darkmind SNMP maniac

    Регистр.:
    31 май 2006
    Сообщения:
    183
    Симпатии:
    76
    Мне мучило чувство стыда за тупнячок-с :D

    (regexp) называется Capturing Group, т.е. то, что попадает в этот regexp, можно вызвать $N, где N - это порядковый номер Capturing Group.

    В вашем случае надо делать так:
    Код:
    # Объявляется в самом начале реврайтов
    RewriteEngine On
    RewriteBase /
    
    # Правило #1
    RewriteCond %{QUERY_STRING} ^page=7$
    RewriteRule index.php /page31/o_studii/ [L,NC,R=301]
    
    # Правило #2 (при необходимости)
    RewriteCond %{QUERY_STRING} ^page=385$
    RewriteRule index.php index.php?page=386 [L,NC,R=301]
    
    И так далее. На упомянутый 1 раз RewritreCond, будут действовать все следующие далее RewriteRile до тех пор, пока не будет задан новый RewriteCond.




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

    Код:
    RewriteEngine On
    RewriteRule ^page/(.*)$ index.php?page=$1 [L]
    
    Все, что попадает в (.*) будет передано, как параметр в ?page=$1. Т.е. набирая http://localhost/page/12 будет скрипту передаваться в виду http://localhost/index.php?page=12
     
    greatilya нравится это.
  7. andrnag

    andrnag

    Регистр.:
    26 мар 2008
    Сообщения:
    350
    Симпатии:
    125
    Что то я не понял, как все таки отрезать Query_String у нового адреса (на который нас направил 301й редирект). Поясните пожалуйста.
     
Статус темы:
Закрыта.