Перенаправление на индекс

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

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

    Smit_ Создатель

    Регистр.:
    1 мар 2010
    Сообщения:
    19
    Симпатии:
    0
    Доброго времени суток! У меня есть несколько вариантов обработки в зависимости от введенной адресной строчки, т.е. для индексной страницы своя обработка, для articles.php своя обработка, для pages.php
    Итак, я хочу сделать что-то вроде этого:
    Все запросы на сайт отправляются на индекс.пхп, дальше, там имеется оператор switch-case для request_uri и в зависимости от введенной строчки (Кстати, в строчке присутствуют get-параметры) выполняется определенный кусочек кода (Таким образом, вместо index.php, articles.php, pages.php я буду пользоваться только более сложным index.php).
    Я знаю, что лучше, конечно, все отдельно держать, просто мне это очень нужно.
    Вопросы:
    1. Вообще так можно сделать?
    2. Могу ли я все еще пользоваться get-параметрами из адресной строчки?
    3. И конечно же, как написать регулярное выражение, которое будет разрешать только:
    1. Буквы
    2. Числа
    3. Символы & = ?
     
  2. ShoxMaster

    ShoxMaster

    Регистр.:
    3 дек 2008
    Сообщения:
    393
    Симпатии:
    150
    Код:
    [A-Za-z?=&]$
    - Нужное регулярное выражение.
    Только зачем? Если вы сделаете всю свою CMS через один единственный index.php, то вам в .htaccess надо будет убить только запросы не к index.php и т.п.
     
  3. Smit_

    Smit_ Создатель

    Регистр.:
    1 мар 2010
    Сообщения:
    19
    Симпатии:
    0
    Я видимо неправильно объяснил, нужно чтобы когда я вводил мойсайт.ru/articles.php?id=56 выполнялся кусок кода из case для articles.php в файле index.php. Т.е. все запросы обрабатывались одним php-файлом, как будто множеством php-файлов.
     
  4. ShoxMaster

    ShoxMaster

    Регистр.:
    3 дек 2008
    Сообщения:
    393
    Симпатии:
    150
    Ну тогда как-то так:
    Код:
    RewriteEngine On
    RewriteRule ^(\w+).php?$ index.php?mode=$1 [L,QSA]
    
    В index.php поставить switch, который будет обрабатывать $_GET["mode"], если страница не будет найдена то - редиректить на 404. А GET-параметры запроса через article.php и т.п. будут сохранятся.
     
    Smit_ нравится это.
  5. Smit_

    Smit_ Создатель

    Регистр.:
    1 мар 2010
    Сообщения:
    19
    Симпатии:
    0
    А как запретить ввод других символов в УРЛ, типа:
    []'"% и т.д., т.е. чтобы вводились только ? = & цифры и буквы
    А что значит [L,QSA] в данном случае?
     
  6. ShoxMaster

    ShoxMaster

    Регистр.:
    3 дек 2008
    Сообщения:
    393
    Симпатии:
    150
    Ну тогда нужно перед RewriteRule добавить:
    Код:
    RewriteCond %{REQUEST_URI} [A-Za-z=&?.]$
    QSA - флаг сохранения Query String, тоесть строки запроса.
    L - последнее правило.
     
    Smit_ нравится это.
Статус темы:
Закрыта.