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

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем rasandrey, 21 янв 2011.

  1. rasandrey

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6
    Подскажите, плиз, что не так делаю. Есть сайт, у которого ссылка сейчас имеет вид index.php?car=100 . Хочу сделать редирект на http://www.домен/car/100

    htaccess на данный момент имеет вид:
    Код:
    AddDefaultCharset windows-1251
    
    RewriteEngine on
    
    RewriteRule ^vip$ index.php?page=17 [L]
    RewriteRule ^about$ index.php?page=1 [L]
    RewriteRule ^contact$ index.php?page=2 [L]
    RewriteRule ^reklama$ index.php?page=3 [L]
    
    RewriteCond ^(.*)$ http://домен.1gb.ua/update.php
    RewriteRule ^(.*)$ http://www.домен.com.ua/update.php [R=permanent,L] 
    
    RewriteCond %{HTTP_HOST} ^домен.com.ua
    RewriteRule ^(.*)$ http://www.домен.com.ua/ [R=permanent,L] 
    
    RewriteCond %{HTTP_HOST} ^домен2.com.ua
    RewriteRule ^(.*)$ http://www.домен2.com.ua/ [R=permanent,L] 
    
    Пытаюсь добавить правило
    после строки: RewriteEngine on в виде:
    Код:
    Redirect 301 /index.php?car=100 http://www.домен.com.ua/car/100 
    Но по запросу http://www.домен.com.ua/index.php?car=100 редирект не происходит. Что я не правильно делаю?

    Добавлено через 56 минут
    Прописал в htaccess правило:

    Код:
    RewriteCond %{QUERY_STRING} (.*)car=([0-9]+)(.*)
    RewriteRule ^(.*)$ http://домен/car/%2? [L,R=301]
    Перенаправление заработало. Теперь с index.php?car=значение перенаправляет на car/значение.

    Остался еще один вопрос как теперь прописать правило, чтоб была подмена index.php?car=значение на car/значение . делаю так:

    Код:
    RewriteRule ^car/(.*)\.html$ /index.php?car=$1 [L]
    Но ничего не происходит
     
  2. ShoxMaster

    ShoxMaster

    Регистр.:
    3 дек 2008
    Сообщения:
    393
    Симпатии:
    150
    Не всегда можно уверенно писать анкор начала правила, тоесть ^, т.к. там может быть ещё и слеш, или другие даные.
    Код:
    RewriteEngine On 
    RewriteRule ^/?car/(.*)\.html$ /index.php?car=$1 [L]
     
  3. ShaDeRzz

    ShaDeRzz

    Регистр.:
    16 окт 2007
    Сообщения:
    176
    Симпатии:
    65
    А если так:
    Код:
    RewriteCond %{REQUEST_URI}  ^/$
    RewriteCond %{QUERY_STRING} ^index.php?car=([0-9]*)$
    RewriteRule ^(.*)$ /car/%1/? [R=301,NC,L]
    И вот это может пригодиться:
    Код:
    RewriteRule ^/car/([0-9]*)/?$ index.php?car=$1 [L]
     
  4. rasandrey

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6
    Не хочет никак :)

    Если не ставить правило (а только перенаправление)
    Код:
    RewriteRule ^/?car/(.*)\.html$ /index.php?car=$1 [L]
    
    То выбивает 404

    если его вставить вместе с перенаправлением, то FF пишет "Неверное перенаправление на странице"
     
  5. ShoxMaster

    ShoxMaster

    Регистр.:
    3 дек 2008
    Сообщения:
    393
    Симпатии:
    150
    http://shoxmater19.x10.mx/car/15.html - в htaccess сейчас то правило, что я выложил на несколько постов выше, только с флагом редиректа. Может вы писали без окончания .html?
     
  6. rasandrey

    rasandrey

    Регистр.:
    2 апр 2009
    Сообщения:
    214
    Симпатии:
    6
    Не работает и все тут...

    Тестирую на denwere может из-за этого проблема?

    Полный htaccess выкладываю, может есть какая-то ошибка

    Код:
    AddDefaultCharset windows-1251
    
    RewriteEngine on
    
    RewriteRule ^/?car/(.*)\.html$ /index.php?car=$1 [L]
    RewriteRule ^saloni/$ /index.php?saloni [L,QSA]
    
    RewriteCond %{QUERY_STRING} (.*)car=([0-9]+)(.*)
    RewriteRule ^(.*)$ /car/%2.html? [L,R=301]
     
  7. ShoxMaster

    ShoxMaster

    Регистр.:
    3 дек 2008
    Сообщения:
    393
    Симпатии:
    150
    Извиняюсь, что долго не заходил. Теперь к сути дела. Когда выполняется редирект от RewriteRule ^/?car/(.*)\.html$ /index.php?car=$1 [L] переходит сразу к редиректу RewriteCond %{QUERY_STRING} (.*)car=([0-9]+)(.*)
    RewriteRule ^(.*)$ /car/%2.html? [L,R=301] и выполняется вечный цикл.
    Вот нормальное правило, на денвере тоже тестировал:
    Код:
    AddDefaultCharset windows-1251
    RewriteEngine on
    RewriteRule ^/?car/(\d+)\.html$ /index.php?car=$1 [L]
    RewriteRule ^saloni/$ /index.php?saloni [L,QSA]