Помогите с 301 редиректом

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

  1. onenures

    onenures Создатель

    Регистр.:
    17 дек 2007
    Сообщения:
    18
    Симпатии:
    1
    Здравствуйте! В тематической ветке по shop script никто не отвечает. Заранее прошу прощения за дублирование вопроса, но в mod rewrite я нуб. Сижу читаю руководство по нему, но больно он заумный...

    Суть проблемы. SSP. Прикручена заказная ЧПУ, работающая как модуль. Т.е. через пхп обрабатывается урл и из базы дергается значение. Проблема в том, что нужно сделать 301 редирект со старых страниц на новые, с чпу.

    В htaccess:

    Код:

    options +followsymlinks
    Rewriteengine on

    Rewritecond %{REQUEST_FILENAME} !-f
    Rewriterule . index.php?99=%{REQUEST_URI} [L]

    "99" - значение переменной, которое задается в скрипте, - так написана чпу. После этого урл уже обработан и выдается с чпу. Но старые страницы вида index.php?productID=XXX и index.php?categoryID=XXX также присутствуют (XXX - ID в базе). Нужно сделать перенаправление со старых. Помогите, пожалуйста. Можно ли вообще разобраться с этим парой правил, чтобы перенаправление автоматическим, ведь страницы формируются динамически?
     
  2. ShoxMaster

    ShoxMaster

    Регистр.:
    3 дек 2008
    Сообщения:
    393
    Симпатии:
    150
    Напишите какой именно вид ссылок сейчас, на которые и нужно редиректить, потому что от правил, которые вы скинули, толку нет никакого.
     
  3. onenures

    onenures Создатель

    Регистр.:
    17 дек 2007
    Сообщения:
    18
    Симпатии:
    1
    ShoxMaster
    Спасибо, что откликнулись.

    Пример ссылки товара без ЧПУ:
    xttp://сайт/index.php?productID=15412

    Эта же ссылка с ЧПУ:
    xttp://сайт/fleshka-16-gb-kingston-data-traveler--15412.htm

    Здесь - "fleshka-16-gb-kingston-data-traveler" - значение, хранимое в БД, его можно задать каким угодно

    "15412" - ID, как видно из первой ссылки.

    Окончание "htm" тоже можно менять, но возьмем только этот частный случай. Мне бы хоть принцип понять.
     
  4. ShoxMaster

    ShoxMaster

    Регистр.:
    3 дек 2008
    Сообщения:
    393
    Симпатии:
    150
    Код:
    RewriteEngine on
    RewriteCond %{QUERY_STRING} productID=(\d+)
    RewriteRule ^index.php$ /fleshka-16-gb-kingston-data-traveler--%1.htm? [R=301,L]
    
    Проверяется правило в котором на строку GET-запроса накладывается регулярка. Если всё гуд, и после productID= идёт ряд цифр длиной больше 1 - выполняется правило, в котором с index.php редиректит на fleshka-16-gb-kingston-data-traveler--%1.htm?. %1 - это група, которая вырезана регуляркой с поверки условия, тоесть (\d+) это и есть ID на который будет редирект. Знак вопроса в конце адреса чистит строку GET запроса который нам больше не нужен. Флаг R=301 указывает, что документ перемещён на другой постоянный адрес. Только есть один нюанс: "fleshka-16-gb-kingston-data-traveler" - эту хрень нелзя изменить, нужно либо добавлять ещё правила, либо переписать модуль ЧПУ.

    Вобщем всё, надеюсь доходчиво написал:)
     
    onenures нравится это.
  5. onenures

    onenures Создатель

    Регистр.:
    17 дек 2007
    Сообщения:
    18
    Симпатии:
    1
    Спасибо огромное. Какой кошмар, мои подозрения подтвердились. Получается одним правилом не указать "иди на страницу с чпу". Придется все вручную прописывать.