Какие сделать url, чтобы работала переадресация?

danneo

Честный
Регистрация
13 Ноя 2007
Сообщения
1.526
Реакции
121
Нужно сделать авто поддомены для города такого вида:
страна.сайт.ру
регион.сайт.ру
город.сайт.ру
Но сначала нужно сформировать url-ы в скрипте. Как правильно сформировать url, чтобы потом сделать переадресацию?
1 вариант:
сайт.ру/index.php?do=mod&country=5&region=3&city=7&cat=15

ЧПУ:

сайт.ру/region-344/country-144/city-157/cat-15/

2 вариант:
сайт.ру/index.php?do=mod&country=5&cat=15
сайт.ру/index.php?do=mod&region=3&cat=15
сайт.ру/index.php?do=mod&city=7&cat=15

ЧПУ:

сайт.ру/region-344/cat-15/
сайт.ру/country-144/cat-15/
сайт.ру/city-157/cat-15/

Ну и буду благодарен за правильный RewriteRule
 
Ты бы вопрос более четко сформировал...
В 1 случае непонятно как ты хочешь 1 ссылку на 3 поддомена редиректнуть. Или ты хочешь на какой-то 1 поддомен средиректить и отстроить на нём новый урл.

Во 2 случае более понятно (если я понял правильно, то у тебя есть урл + админка его переколбашивает в ЧПУ урл, а тебе нужно отстроить ссылку на поддомене, да что б она работала...).
В этом случае можно сделать то, что тебе нужно, но нужно увидеть как админка формирует ЧПУ. Можешь кинуть содержимое .htacess сюда или в личку, постараюсь помочь.
 
Ты бы вопрос более четко сформировал...
Я не силен в htaccess, вот и каша.
Нужно чтобы поддомен был либо страны, либо региона, либо города.

Принцип работы:
пользователь выбирает страну, попадает на страна.сайт.ру/категория/
Если далее в списке выбирает регион, то попадает на поддомен регион.сайт.ру/категория/
Если в отфильтрованном списке выбирает нужный город, то попадает на поддомен город.сайт.ру/категория/
Категория не обязательно может быть.

Формирование ЧПУ пока нет, будет позже... на основании решения других задач.
вопрос в том, как мне сформировать сначала url, а потом в какой вид сделать ЧПУ, чтобы потом уже можно было сделать на поддомены.
Как-то так :)
P.S. а CMS-ка DLE (свой модуль)
 
Берем этот случай:
Код:
#Сайт обрабатывает ссылки в таком виде:
сайт.ру/index.php?do=mod&country=5&cat=15
сайт.ру/index.php?do=mod&region=3&cat=15
сайт.ру/index.php?do=mod&city=7&cat=15
# ЦМС генерирует ЧПУ такого вида:
сайт.ру/country-5/cat-15/
сайт.ру/region-3/cat-15/
сайт.ру/city-7/cat-15/
Могу предположить, что ЧПУ будет реализовано как-то так (на самом деле ДАЛЕКО не самая лучшая реализация, но за неимением готового файла htaccess как пример пойдёт)
Предположим, что эта часть уже была в htaccess:
Код:
## работает если в строке запроса ТОЛЬКО 2 параметра, набросок хоть и рабочий, но так лучше не делать :)
## Начало модуля ЧПУ
RewriteCond %{QUERY_STRING} do=mod&(.*)=([0-9]+)&(.*)=([0-9]+) [NC]
RewriteRule do=mod&(.*)=([0-9]+)&(.*)=([0-9]+) сайт.ру/$1-$2/$3-$4/? [R=301,L]
RewriteCond %{REQUEST_URI} ^(.*)-([0-9]+)/(.*)-([0-9]+)/$ [NC]
RewriteRule ^(.*)-([0-9]+)/(.*)-([0-9]+)/$ index.php?do=mod&$1=$2&$3=$4 [QSA,L]
## Конец модуля ЧПУ
Тогда для работы с субдоменами нужно будет сваять такую лабуду вместо написанного вверху:
Код:
##Основным зеркалом должно быть ТОЛЬКО http://сайт.ру иначе будет каша с субдоменом www, но это легко решается простановкой 301 редиректа с www на http
RewriteCond %{QUERY_STRING} do=mod&(.*)=([0-9]+)&(.*)=([0-9]+) [NC]
RewriteRule do=mod&(.*)=([0-9]+)&(.*)=([0-9]+) $1-$2.сайт.ру/$3-$4/? [R=301,L]
RewriteCond %{THE_REQUEST} ^GET\ (.*)-([0-9]+).сайт.ру/(.*)-([0-9]+)$\ HTTP
RewriteRule (.*)-([0-9]+).сайт.ру/(.*)-([0-9]+) сайт.ру/index.php?do=mod&$1=$2&$3=$4 [QSA,L]
Код конечно кривой, но работать будет...
А для того, что б написать нормальное правило - нужен уже готовый и работающий файл htaccess...
 
Последнее редактирование:
появился такой вопрос... модуль сделал почти... хочу сделать ЧПУ. Пока без субдоменов хотя бы.
url формирую в DLE. Хотя, мне кажется, это не имеет значения.
url такого вида (написал несколько возможных вариантов:(
Код:
index.php?area=country&areaid=18&catid=35&npage=2
index.php?area=region&areaid=18&catid=35&npage=2
index.php?area=city&areaid=18&catid=35&npage=9
index.php?area=all&catid=35&npage=5
index.php?area=country&areaid=18


ЧПУ думаю такой сделать (соответственно:(
Код:
russia/auto/page-2/
moskovskaya-oblast/auto/page-2/
moskva/auto/page-2/
all/auto/page-2/
russia/

У каждой страны, региона или города свое поле в БД (название) для ЧПУ, типа, russia, moskva и т.п. (транслит).
Также и у категории (в примере "auto").

А вопрос в том, если я сформирую так ЧПУ ссылку. Как сервер поймет, что нужно вывести именно нужную категорию, этого города (например).
В самом DLE при формировании ЧПУ ссылок добавлен еще id. По нему и идет выборка из БД. Например, namecategory/13-zapis.html
Иначе нужно брать из url параметры (название страны в ЧПУ виде, russia) и искать ее в БД, вместо id, как у меня сейчас. Это тогда и скрипт нужно дописывать, т.к. areaid это цифра, а не строковое значение получается. И безопасность ухудшается.
В общем, в этом проблема...
Как быть?
 
Решил понемногу делать сам.
самвозникла проблема.
PHP:
index.php?area=country&areaid=18
index.php?area=region&areaid=18
index.php?area=city&areaid=18

у всех разное area.
Я сделал так:
Код:
RewriteRule ^firms/([0-9]*)/$ index.php?do=firms&area=country&areaid=$1 [L]
так все работает. Но как сделать тогда для region и city?
Как сервер поймет, что при запросе нужно обращаться по адресу region, а не city, и не country? Т.е. как сервер определить, что запрос /firms/russia/ это страна, а не регион и не город?

В таком случае можно только так?
Код:
RewriteRule ^firms/country/(.*)/$ index.php?do=firms&area=country&areaid=$1 [L]
RewriteRule ^firms/region/(.*)/$ index.php?do=firms&area=region&areaid=$1 [L]
RewriteRule ^firms/city/(.*)/$ index.php?do=firms&area=city&areaid=$1 [L]
Результат:
/firms/country/russia/
/firms/region/moskovskaya-oblast/
/firms/city/moskva/
Как-то некрасиво получается...
Что можно сделать?

Мне бы так сделать: /firms/russia/
 
Последнее редактирование:
Если вопрос ещё актуален -распиши более подробно что и как собираешься делать... мне данная тема также может пригодится.

Насколько я понял, то основная проблема в том, что выборка из базы делается по id (сделал на основе данной части строки: ^firms/([0-9]*)/$), возможно для решения нужно будет создать отдельные правила для стран по их id (для них количество правил должно быть не большим, так как стран с id, как я понимаю, не много), и правила для регионов (тут правил будет гораздо больше, ввиду больше'го количества регионов с их id), а всё, что не сработало по этим двум наборам правил - попадёт в правила для городов.

В таком случае можно только так?
Код:
RewriteRule ^firms/country/(.*)/$ index.php?do=firms&area=country&areaid=$1 [L]
RewriteRule ^firms/region/(.*)/$ index.php?do=firms&area=region&areaid=$1 [L]
RewriteRule ^firms/city/(.*)/$ index.php?do=firms&area=city&areaid=$1 [L]

Результат:
Код:
/firms/country/russia/
/firms/region/moskovskaya-oblast/
/firms/city/moskva/
Как-то некрасиво получается...
Что можно сделать?

Мне бы так сделать: /firms/russia/
Тут-то как-раз просто, пишешь в конце ещё 3 правила переадрессации в которых убираешь те самые country, region и city а-ля:
Подумал над правилами, которые написал и понял, что не сработает... Нужно думать в направлении написания достаточно большого количества правил под страны и регионы, а потом обобщенные правила под города, по другому пока не лезет ничего в голову...

Есть более свежая версия аштиаксеса? Может что-то новое появится в голове после просмотра...
 
Последнее редактирование:
Если вопрос ещё актуален -распиши более подробно что и как собираешься делать... мне данная тема также может пригодится.
уже все, выбрал способ, и сделал ЧПУ... когда все страны, города в одной таблице.
 
Назад
Сверху