ЧПУ

Статус
В этой теме нельзя размещать новые ответы.

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:
 
а теперь опять не могу понять одной вещи :(

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

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

как такое побороть? :ah:
 
да легко просто идет проверка присвоено ли значение переменной отвечающей за язык, если нет, то дается ей дефолтное значение.
Код:
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';

Это о том как такое реализуется, а что конкретно надо побороть?
 
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

в одном случае идет значение языка, а в другом оно отсутствует :( и подставляется дефолтный соответственно
 
Решение в лоб
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]

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

если htaccess имитируется какая-то папка и при этом она существует.. что обрабатывается первым?
 
Сначала htaccess
RewriteCond %{REQUEST_FILENAME} !-f #применять RewriteRule, только если запрашиваемое имя файла не совпадает с именем какого-нибудь реального файла на сервере
RewriteCond %{REQUEST_FILENAME} !-d #и не совпадает с именем какой-нибудь реальной директории
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху