За последние 24 часа нас посетили 22643 программиста и 1281 робот. Сейчас ищут 827 программистов ...

Как делать ЧПУ

Тема в разделе "PHP для новичков", создана пользователем AnteFil, 2 июл 2020.

  1. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    Я частично настроил на сайте ЧПУ ссылка имеет вид
    https://saite.com/автомобили/город/марка/
    Такая схема вполне устраивает и всё работает проблема с поисковой строкой сейчас GET параметры из поиска передаются так
    https://saite.com/автомобили/?city=москва&mark=BMW
    по сути ЧПУ не используется и одна страница имеет две ссылки
    https://saite.com/автомобили/?city=москва&mark=BMW
    https://saite.com/автомобили/москва/BMW

    Что можно сделать что бы при клике в форме гет параметры передавались и открывалась ссылка вида
    https://saite.com/автомобили/город/марка/
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    https://php.ru/forum/posts/627861/

    А чтобы не было дублей и прочей подобной фигни, обрабатывай исходный адрес прямо во фронте:
    Как сделать единую точку входа с ЧПУ?

    P.S. В путях автодекодирование URL-кодировки не выполняется, поэтому:
    - либо делай это сам;
    - либо используй в словарях URL-закодированные слаги;
    - либо не используй кириллицу в адресах (и в слагах словарей) – многие предпочитают именно этот вариант.

    Т.е. из формы ты получаешь нативный для юзера текст, а для редиректа уже используешь не эти ключи (названия) из формы/словаря, а слаги из словаря.
    --- Добавлено ---
    Ну, и для осн. запроса (после редиректа) уже делаешь выборку по слагам на латинице.
     
  3. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    Я не до конца понимаю буквы которые там написаны.
    У меня есть страница например сity.php (обработчик) которая и обрабатывает все запросы я должен добавить условие в .htaccess
    Код (Text):
    1. RewriteCond %{REQUEST_FILENAME} !-f
    2. RewriteRule ^.* /автомобили/сity.php
    Что бы все запросы внутри каталога автомобили уходили на сity.php правильно понял ???
    Дальше опять на страницу сity.php я добавляю некий код который будет разбирать запрос на составные части и вытаскивать переданыне параметры?
    Если я всё правильно понял то один фиг ссылка в браузере останется прежней
    --- Добавлено ---
    в .htaccess у меня уже прописаны правила
    --- Добавлено ---
    И так и не могу понять зачем там городить php если в .htaccess
    Код (Text):
    1.  
    2. RewriteRule ^автомобили/([^/]+)/$ city.php?do=mod&city=$1[QSA]
    3. RewriteRule ^автомобили/([^/]+)/([^/]+)/$  city.php?do=mod&city=$1&model=$2 [QSA]
    видоизменяем строку браузера с данными так как нужно нам и всё
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Нет, единая точка входа (фронт-контроллер, фронт) – это единый «фронтальный» обработчик для всех запросов. Именно он занимается разруливанием запросов, распределяя их по частным обработчикам, а не модуль сервера, как в последнем показанном вами наборе из двух правил.
    --- Добавлено ---
    Если вы про статью, то вам, видимо, пока рано заниматься такими вещами, т.к. статья написана практически для нулевичков (и вполне хорошо понимается ими).
    --- Добавлено ---
    P.S. Наверное, можно считать фронтом файл city.php в пределах ветки /автомобили/, но в общем-то фронт обычно отвечает за обработку запросов по всем адресам, начиная с /, а не какой-то отдельной ветви ;)
    --- Добавлено ---
    Трансляция частей пути в GET-параметры в показанных правилах – это древняя хрень, которая и порождает дубли, если вам до сих пор не понятно ;)