ЧПУ

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

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

    Pup_vseya Создатель

    Регистр.:
    20 ноя 2008
    Сообщения:
    27
    Симпатии:
    2
    Я наверное кретин :ah: но не нашел ответа как не искал...

    вообщем грубо говоря есть скрипт, пример запроса таков:

    search.php?country=russia&sity=moscow&param=bla-bla .. и т.д.

    надо получить в итоге search/russia/moscow/bla-bla.html, при этом если страны "раши" нет в БД - на главную, города - список городов нашей "раши", бла-бла - что есть в "златоглавой"; как такое реализуется? Каков принцип перевода в ЧПУ неограниченного кол-ва параметров к скрипту?

    при этом хотелось бы знать еще и следующее, как генерируются страницки типа : /movies/2928-park-kultury-i-otdyha , понимаю, что кусок 2928-park-kultury-i-otdyha скорее всего храниться в БД, но как идет обращение.. хз

    :read: если уж полный даун, ну, побаньте мну:ah:
     
  2. falc00n

    falc00n Прохожие

  3. Pup_vseya

    Pup_vseya Создатель

    Регистр.:
    20 ноя 2008
    Сообщения:
    27
    Симпатии:
    2
    а теперь опять не могу понять одной вещи :(

    вообщем есть обращение к сайту site.ru/rus/ (т.е. выбор языка)

    пользователь может набрать site.ru/rus/search/russia/moscow/bla-bla.html, а может просто site.ru/search/russia/moscow/bla-bla.html

    как такое побороть? :ah:
     
  4. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    да легко просто идет проверка присвоено ли значение переменной отвечающей за язык, если нет, то дается ей дефолтное значение.
    Код:
    RewriteRule ^site.ru/([a-z]+)/([a-z]+)/([a-z]+)/([a-z]+).html$ index.php?lang=rus&action=$1&country=$2&city=$3&page=$4 [L]
    RewriteRule ^site.ru/([a-z]+)/([a-z]+)/([a-z]+)/([a-z]+)/([a-z]+).html$ index.php?lang=$1&action=$2&country=$3&city=$4&page=$5 [L]
    
    или в php
    PHP:
    $lang = (isset($_GET['lang']))? $_GET['lang'] : 'rus';
    Это о том как такое реализуется, а что конкретно надо побороть?
     
    Pup_vseya нравится это.
  5. Pup_vseya

    Pup_vseya Создатель

    Регистр.:
    20 ноя 2008
    Сообщения:
    27
    Симпатии:
    2
    antidote, дело в том что я наверное не корректно описал что надо :( сорри, не сразу подумал..

    site.ru/rus/search.html
    site.ru/rus/search/russia.html
    site.ru/rus/search/russia/moscow.html
    site.ru/rus/search/russia/moscow/bla-bla.html

    или же

    site.ru/search.html
    site.ru/search/russia.html
    site.ru/search/russia/moscow.html
    site.ru/search/russia/moscow/bla-bla.html

    в одном случае идет значение языка, а в другом оно отсутствует :( и подставляется дефолтный соответственно
     
  6. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    Решение в лоб
    RewriteRule ^/(rus|eng|talaglog)/([a-z0-9]+).html$ ?lang=$1&action=$2 [L]
    RewriteRule ^/(rus|eng|talaglog)/([a-z0-9]+)/([a-z0-9]+).html$ ?lang=$1&action=$2&country=$3 [L]
    RewriteRule ^/(rus|eng|talaglog)/([a-z0-9]+)/([a-z0-9]+)/([a-z0-9]+).html$ ?lang=$1&action=$2&country=$3&city=$4 [L]
    RewriteRule ^/(rus|eng|talaglog)/([a-z0-9]+)/([a-z0-9]+)/([a-z0-9]+)/([a-z0-9-]+).html$ ?lang=$1&action=$2&country=$3&city=$4&bla=bla [L]

    RewriteRule ^/([a-z0-9]+).html$ ?lang=rus&action=$2 [L]
    RewriteRule ^/([a-z0-9]+)/([a-z0-9]+).html$ ?lang=rus&action=$2&country=$3 [L]
    RewriteRule ^/([a-z0-9]+)/([a-z0-9]+)/([a-z0-9]+).html$ ?lang=rus&action=$2&country=$3&city=$4 [L]
    RewriteRule ^/([a-z0-9]+)/([a-z0-9]+)/([a-z0-9]+)/([a-z0-9-]+).html$ ?lang=rus&action=$2&country=$3&city=$4&bla=bla [L]

    вроде бы нигде не ошибся, но это только для определенного количества параметров. для определенного я не знаю как, да и сложно представить когда в скрипт будет передаваться непонятно сколько параметров. как их потом разбирать??
     
    Pup_vseya нравится это.
  7. Pup_vseya

    Pup_vseya Создатель

    Регистр.:
    20 ноя 2008
    Сообщения:
    27
    Симпатии:
    2
    и последнее, вопрос конечно идиотский.... но...

    если htaccess имитируется какая-то папка и при этом она существует.. что обрабатывается первым?
     
  8. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    Сначала htaccess
    RewriteCond %{REQUEST_FILENAME} !-f #применять RewriteRule, только если запрашиваемое имя файла не совпадает с именем какого-нибудь реального файла на сервере
    RewriteCond %{REQUEST_FILENAME} !-d #и не совпадает с именем какой-нибудь реальной директории
     
Статус темы:
Закрыта.