За последние 24 часа нас посетили 31950 программистов и 1380 роботов. Сейчас ищут 813 программистов ...

Редирект с помощью htaccess

Тема в разделе "Прочие вопросы по PHP", создана пользователем darkgod, 15 апр 2010.

  1. darkgod

    darkgod Активный пользователь

    С нами с:
    31 мар 2008
    Сообщения:
    201
    Симпатии:
    0
    Доброго всем времени суток!

    сейчас у меня работает ЧПУ при помощи htaccess, с содержимым
    Код (Text):
    1. RewriteRule ^([a-zA-Z0-9_-]+).html$ index.php?mod=info&action=index&id=$1 [QSA]
    2. RewriteRule ^([a-zA-Z0-9_-]+).htm$ index.php?mod=products&action=open&id=$1 [QSA]
    3. RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?mod=products&action=index&cat=$1 [QSA]
    Как видно из примера ссылки все разные, есть как заканчивающиеся на .html, .htm и просто / в конце - и все они имеют первый уровень и используются для разных модулей.

    Можно как-либо сделать из моего примера, чтобы все ссылки имели вид link.htm или такое невозможно?[/php]
     
  2. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    ну так пропишите везде ссылки с htm и поправьте правила
     
  3. darkgod

    darkgod Активный пользователь

    С нами с:
    31 мар 2008
    Сообщения:
    201
    Симпатии:
    0
    ну так прописывал - и тогда работает только верхняя ссылка... Затем и обратился сюда чтоб помогли переписать правила
     
  4. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    darkgod, если все ссылку будут .htm, то ты получишь три одинаковых правила. Три. Одинаковых. Как mod_rewrite будет их различать? Ты сам-то способен будешь отличить ссылку test.html ведущую ?mod=info от ссылки test.htm ведущую на ?mod=products?

    Нет? Вот и mod_rewrite не может.

    upd чё не хочешь уточнение сделать?

    Код (Text):
    1. RewriteRule ^info/([a-zA-Z0-9_-]+).htm$ index.php?mod=info&action=index&id=$1 [QSA,L]
    2. RewriteRule ^products/([a-zA-Z0-9_-]+).htm$ index.php?mod=products&action=open&id=$1 [QSA,L]
    3. RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?mod=products&action=index&cat=$1 [QSA][/code,L]
    4.  
    5. И получишь ссылки info/test.htm для информации и products/test.htm - для продуктов.
    6.  
    7. P.S. Ключ L останавливает "поиски" других совпадений.
     
  5. darkgod

    darkgod Активный пользователь

    С нами с:
    31 мар 2008
    Сообщения:
    201
    Симпатии:
    0
    да я бы с удовольствием - в своих проектах так и делаю...

    Просто есть заказ - перевести статичный сайт на динамические рельсы, НО с сохранением всей структуры и всех ссылок... а там все документы лежат в корне... только вот будут и категории и подкатегории и продукты и информационные страницы...

    наверно придется выкручиваться таким способом - для всех категорий которые уже есть прописывать ссылку ручками,
    Код (Text):
    1. RewriteRule ^cpucat.htm$ index.php?mod=products&action=index&cat=cpucat [QSA]
    для продуктов чтоб они делались автоматом по правилу
    Код (Text):
    1. RewriteRule ^([a-zA-Z0-9_-]+).htm$ index.php?mod=products&action=open&id=$1 [QSA]
     
  6. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Код (Text):
    1. RewriteRule ^.*$ index.php
    В index.php роутишь как тебе надо

    PHP:
    1. <?php
    2. $urls = array('link/test.html' => array('module' => 'products.php', 'action' => 'index', 'cat' => 'cpucat')
    3. ...
    4. );
    5.  
    6. if(array_key_exists($queryString, $urls)) {
    7.    $app->dispatch($urls[$queryString]);
    8. }