За последние 24 часа нас посетили 35009 программистов и 1738 роботов. Сейчас ищут 819 программистов ...

ЧПУ

Тема в разделе "PHP для новичков", создана пользователем rs_ssh, 4 дек 2016.

  1. rs_ssh

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

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    Пробую сделать ЧПУ с помощью .htaccess, правило срабатывает но,
    почему то echo $country выводит 1. Использую редирект после выбора страны onchange="window.location='/'+this.value;

    В .htaccess делаем правило:
    RewriteRule ^russia$ /?country=2 [L]

    В php:
    PHP:
    1. <?
    2. if (isset($_GET['country']))
    3. {
    4.     $country = $_GET['country'];
    5. }
    6. echo $country; // выводит 1
    7. ?>
    Снизу:
    HTML:
    1.     <label>Выбор страны:</label>
    2.     <select name="country" onchange="window.location='/'+this.value;">
    3.         <option value="">Другая страна</option>
    4.         <option value="russia" <?if($country == 2){echo "selected";}?>>Россия</option>
    5.     </select>
     
  2. rs_ssh

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

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    Заработало! А что насчёт остальных ссылок а html? Надо вручную добавлять /russia/ и прописывать правила в htaccess или это можно как-то автоматизировать?
    Например, sait.com/contakt надо менять вручную на sait.com/russia/contakt для России и так для всех ссылок?
    Сайт может грузится так - sait.com/russia, правило срабатывает(RewriteRule ^russia$ /?country=2 [L]).
     
  3. rs_ssh

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

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    Или же в ссылки подставлять переменную sait.com/<?echo $country_name;?>/contakt ?
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Ссылки нужно формировать такими, какими вы их хотите видеть. Естественно, везде должны быть публичные ссылки, а не те, в которые вы их рерайтите. ЧПУ предполагает использование символьных идентификаторов, а не числовых, хотя конечно можно ограничиться только использованием прежде всего путей с проскакивающими кое-где числовыми идентификаторами, например /country/2, правда, это недоЧПУ какое-то получается, но все-таки иногда такое имеет место быть.
    --- Добавлено ---
    Вы можете слаги (символьные идентификаторы) передавать прямо в скрипт, а там уже менять их на числовые идентификаторы или даже в отдельных случаях продолжать использовать символьные идентификаторы, как основные, а иногда и единственные.

    Оптимальным вариантом реализации ЧПУ будет отказ от трансляции элементов пути в GET-параметр(ы) и использование в скрипте исходного адреса. Основу этого подхода я описал в статье Как сделать единую точку входа с ЧПУ?
    --- Добавлено ---
    Если вам все же ближе использование кучи правил в .htaccess, чем предложенный мной способ, то хотя бы при рерайте полностью раскрывайте внутренний адрес обработчика, например index.php?country=2, а не то, что вы написали (слеш в начале подстановки можно поставить, но обычно значительно проще использовать директиву RewriteBase, иначе вы можете столкнуться с определенными непредвиденными проблемами).