Помогите разобраться с mod_rewrite

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

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

    MyCreature Постоялец

    Регистр.:
    5 окт 2008
    Сообщения:
    83
    Симпатии:
    5
    Не могу понять суть перенаправлений. Помогите)

    Пример: сайт имеет структуру - site.ru/index.php?page=catalog
    Грузится index.php , через GET получаем значение page и в зависимости от этого выводим данные.

    Решили сделать ЧПУ: site.ru/catalog
    Пишем htaccess:
    RewriteBase /
    RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?page=$1 [L]
    Сейчас вызываем site.ru/catalog , незаметно срабатывает перенаправление site.ru/index.php?page=catalog
    , НО зачем сейчас перенаправлять на site.ru/index.php?page=catalog , а не просто на site.ru/index.php. Ведь сейчас из строки не вытащить данные GET'ом???
     
  2. phoenix78

    phoenix78 Создатель

    Регистр.:
    12 янв 2007
    Сообщения:
    29
    Симпатии:
    11
    А ты проверял, что GET не работает? ;)

    Можно, конечно, и просто кидать все запросы на index.php, а в нем ручками парсить $_SERVER["REQUEST_URI"], но зачем если есть mod_rewrite, который приведет несколько форм написания урлов к одной (уже известной движку)?

    Вся прелесть в том, что с помощью mod_rewrite можно натянуть ЧПУ на уже существующий движок только редактированием .htaccess и переделкой механизма формирования ссылок.
     
    MyCreature нравится это.
  3. MyCreature

    MyCreature Постоялец

    Регистр.:
    5 окт 2008
    Сообщения:
    83
    Симпатии:
    5
    Все! На третий день понял!
    С толку сбила статья: http://www.webpp.ru/blog/ispolzovanie-chpu-pri-optimizacii-dlya-poiskovyx-sistem В ней как раз говориться про такое разбиение $_SERVER["REQUEST_URI"].

    А на самом деле все гораздо легче: Во флагах указать [QSA,L] и GET заработает!

    Вот что пришлось прочитать, перед тем как разобрался во всем. От простого к сложному:
    http://www.regioninfo.ru/mod_rewrite.php
    http://kurapov.name/technology/web/nice_urls/
    http://bestblog.name/2008/11/modrewrite.html
    http://www.newscript.ru/?q=node/128
    http://www.seobility.by/articles/01/
    http://apachedev.ru/2006/07/31/mod_rewrite-preobrazovanie-dinamicheskih-url-v-staticheskie/
    http://omsk777.ru/all.php?act=posix

    и авто генераторы статических URL:
    http://apachedev.ru/2007/02/27/generator-staticheskih-url/
    http://www.generateit.net/mod-rewrite/
    http://cooletips.de/htaccess/
     
  4. phoenix78

    phoenix78 Создатель

    Регистр.:
    12 янв 2007
    Сообщения:
    29
    Симпатии:
    11
    за предачу GET запросов отвечает модификатор [QSA], а [L] означает, что если адрес удовлетворяет правилу, то дальше проверка не выполняется.
     
  5. serjinio

    serjinio

    Регистр.:
    10 май 2007
    Сообщения:
    439
    Симпатии:
    49
    Уточню ... [QSA] передает параметры которые после ?
     
  6. phoenix78

    phoenix78 Создатель

    Регистр.:
    12 янв 2007
    Сообщения:
    29
    Симпатии:
    11
    QSA (qsappend) добавляет исходные параметры запроса (query string) к замене. Если замена не включает в себя новые параметры запроса, то исходные параметры запроса добавляются автоматически. Если же включает, то без флага QSA исходные параметры запроса будут утеряны.
     
Статус темы:
Закрыта.