Не работает 301 редирект

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем Хомячок, 20 ноя 2014.

  1. Хомячок

    Хомячок

    Регистр.:
    10 апр 2008
    Сообщения:
    184
    Симпатии:
    103
    Здравствуйте! Пытаюсь сделать 301 редирект старых ссылок на новые, но ничего не работает:

    Redirect 301 /index.php?do=showanket&id=56 http://new-domain.ru/anketa-ira-56.html

    В чем может быть причина?
     
  2. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    192
    Симпатии:
    233
    site.ru/path?query
    Redirect позволяет сравнивать с шаблоном только /path т.е только то что идет до знака вопроса. Тут поможет RewriteRule.
    Вставлять сразу после RewriteEngine On
    Код:
    RewriteCond %{QUERY_STRING} =do=showanket&id=56
    RewriteRule ^index\.php http://new-domain.ru/anketa-ira-56.html? [R=301,L]
    
    Или так
    Код:
    RewriteCond %{REQUEST_URI}?%{QUERY_STRING} =/index.php?do=showanket&id=56
    RewriteRule ^ http://new-domain.ru/anketa-ira-56.html? [R=301,L]
    
     
    Хомячок нравится это.
  3. UJy

    UJy

    Регистр.:
    23 авг 2011
    Сообщения:
    338
    Симпатии:
    121
    Попробуй следующее:
    Код:
    ## В начало htaccess ставишь (если нету)
    RewriteEngine On
    # В некоторых случаях может потребоваться, но далеко не всегда
    RewriteBase /
    
    ##Потом пробуешь это в любом месте после...
    RedirectPermanent /index.php?do=showanket&id=56 http://new-domain.ru/anketa-ira-56.html
    
    PS: просьба проверить работоспособность вариантов от пользователя lag, мне очень любопытно будут ли работать...
     
  4. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    192
    Симпатии:
    233
    А что именно в тех конструкциях вызывает вопросы ?
     
  5. UJy

    UJy

    Регистр.:
    23 авг 2011
    Сообщения:
    338
    Симпатии:
    121
    в этом примере
    Код:
    RewriteCond %{REQUEST_URI}?%{QUERY_STRING} =/index.php?do=showanket&id=56
    
    интересует конструкция =/ вначале... уже много раз опытным путём убеждался в том, что в REQUEST_URI начального / в урлах нету. Но возможно будет работать со знаком = в начале?

    В этом примере
    Код:
    RewriteCond %{QUERY_STRING} =do=showanket&id=56
    
    Интересует работоспособность с начальным знаком =. Я такой конструкции нигде раньше не встречал просто, вот и интересно...
    Также интересно как себя поведет это правило при такой конструкции строки параметров:
    Код:
    site.ru/index.php?something=do=showanket&id=56
    
    В общем суть вопроса именно в начальном знаке = - как правила редиректов с ним работают...
     
  6. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    192
    Симпатии:
    233
    В официальной документации это давно описано http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html
    Шаблон сравнивается не как регулярное выражение, а как обычная строка.
     
    UJy нравится это.
  7. UJy

    UJy

    Регистр.:
    23 авг 2011
    Сообщения:
    338
    Симпатии:
    121
    А относительно '>CondPattern' и '<CondPattern' можете растолковать? Когда они срабатывают, или как рассматриваются?
     
  8. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    192
    Симпатии:
    233
    Лексически больше, меньше. Например: abc > abb вернет true
     
    UJy нравится это.
  9. Хомячок

    Хомячок

    Регистр.:
    10 апр 2008
    Сообщения:
    184
    Симпатии:
    103
    Проверил, работают 2 варианта, описанные lag. RedirectPermanent и Redirect 301 тут не работают, почему описано в том же сообщении с верными вариантами. Кстати варианты с %{QUERY_STRING} я пробовал до этого, но добился только зацикленной переадресации! Но сейчас все ок, спасибо за помощь!
     
  10. Хомячок

    Хомячок

    Регистр.:
    10 апр 2008
    Сообщения:
    184
    Симпатии:
    103
    Да, вот только сейчас удалось протестить норм, домен не работал основной некоторое время. Получается что из-за вот этой записи образуется бесконечная переадресация, как можно поправить?

    Это ЧПУ для новых страниц, когда убираю эту строку, уходит бесконечная переадресация, но новые страницы не работают(

    Вот весь реальный код .htaccess если надо (вырезаны только неважные тут конструкции DLE), примеры выше были изменены из этических соображений, смотреть только 18+
     
    Последнее редактирование: 25 ноя 2014
    krast90 нравится это.