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

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

  1. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.445
    Симпатии:
    113
    Нужно сделать авто поддомены для города такого вида:
    Но сначала нужно сформировать url-ы в скрипте. Как правильно сформировать url, чтобы потом сделать переадресацию?
    1 вариант:
    2 вариант:
    Ну и буду благодарен за правильный RewriteRule
     
  2. UJy

    UJy

    Регистр.:
    23 авг 2011
    Сообщения:
    338
    Симпатии:
    121
    Ты бы вопрос более четко сформировал...
    В 1 случае непонятно как ты хочешь 1 ссылку на 3 поддомена редиректнуть. Или ты хочешь на какой-то 1 поддомен средиректить и отстроить на нём новый урл.

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

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.445
    Симпатии:
    113
    Я не силен в htaccess, вот и каша.
    Нужно чтобы поддомен был либо страны, либо региона, либо города.

    Принцип работы:
    Категория не обязательно может быть.

    Формирование ЧПУ пока нет, будет позже... на основании решения других задач.
    вопрос в том, как мне сформировать сначала url, а потом в какой вид сделать ЧПУ, чтобы потом уже можно было сделать на поддомены.
    Как-то так :)
    P.S. а CMS-ка DLE (свой модуль)
     
  4. UJy

    UJy

    Регистр.:
    23 авг 2011
    Сообщения:
    338
    Симпатии:
    121
    Берем этот случай:
    Код:
    #Сайт обрабатывает ссылки в таком виде:
    сайт.ру/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...
     
    Последнее редактирование: 14 ноя 2013
    danneo нравится это.
  5. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.445
    Симпатии:
    113
    появился такой вопрос... модуль сделал почти... хочу сделать ЧПУ. Пока без субдоменов хотя бы.
    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 это цифра, а не строковое значение получается. И безопасность ухудшается.
    В общем, в этом проблема...
    Как быть?
     
  6. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.445
    Симпатии:
    113
    Решил понемногу делать сам.
    самвозникла проблема.
    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/russia/
     
    Последнее редактирование: 13 дек 2013
  7. UJy

    UJy

    Регистр.:
    23 авг 2011
    Сообщения:
    338
    Симпатии:
    121
    Если вопрос ещё актуален -распиши более подробно что и как собираешься делать... мне данная тема также может пригодится.

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

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

    Есть более свежая версия аштиаксеса? Может что-то новое появится в голове после просмотра...
     
    Последнее редактирование: 8 янв 2014
  8. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.445
    Симпатии:
    113
    уже все, выбрал способ, и сделал ЧПУ... когда все страны, города в одной таблице.