За последние 24 часа нас посетили 17497 программистов и 1721 робот. Сейчас ищут 1662 программиста ...

ЧПУ-ссылки c помощью PHP

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

  1. mike_stepanov

    mike_stepanov Новичок

    С нами с:
    28 май 2015
    Сообщения:
    6
    Симпатии:
    0
    Здравствуйте, дорогие форумчане.

    У меня возникла идея сделать на своем сайте ЧПУ-ссылки. C PHP файлами все было легко, но вот с .htacess было немного затруднительно.

    Из .../view_cat.php?cat=1 я превратил в .../cat/1 c помощью этих трех строк:

    RewriteRule ^cat/([0-9]+)([/]{0,1})$ view_cat.php?cat=$1&norec [L]
    RewriteCond %{QUERY_STRING} cat=([0-9]+)$
    RewriteRule ^view_cat\.php$ /cat/%1? [L,R=301]


    В принципе все праволинейно. Но на этом я не остановился.

    Теперь я пытаюсь превратить .../view_cat.php?cat=1 в .../11klassniki/

    Здесь я и застрял. Как бы я не мухливал с кодом, ничего не получается. :-( Вот собственно, и он:

    RewriteRule ^11klassniki/([a-zA-Z0-9]+)([/]{0,1})$ view_cat.php?cat=1$1&norec [L]
    RewriteCond %{QUERY_STRING} cat=([a-zA-Z0-9]+)$
    RewriteRule ^view_cat.php?cat=1$ /11klassniki/ [L,R=301]

    RewriteRule ^material/([a-zA-Z0-9]+)([/]{0,1})$ view_cat.php?cat=2$1&norec [L]
    RewriteCond %{QUERY_STRING} cat=([a-zA-Z0-9]+)$
    RewriteRule ^view_cat.php?cat=2$ /material/ [L,R=301]


    Финальный код должен делать вот так:

    1)
    превратить .../view_cat.php?cat=1 в .../11klassniki/

    2)
    превратить .../view_cat.php?cat=2 в .../material/
     
    #1 mike_stepanov, 2 июл 2016
    Последнее редактирование: 2 июл 2016
  2. Emilien

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

    С нами с:
    30 июн 2016
    Сообщения:
    246
    Симпатии:
    156
    Код (Text):
    1.  
    2. RewriteCond %{THE_REQUEST} " /view_cat\.php\?cat=1 "
    3. RewriteRule ^ /11klassniki/? [R=301,L]
    4.  
    5. RewriteCond %{THE_REQUEST} " /view_cat\.php\?cat=2 "
    6. RewriteRule ^ /material/? [R=301,L]
    7.  
    8.  
    9. RewriteRule ^11klassniki/$ /view_cat.php?cat=1 [L]
    10.  
    11. RewriteRule ^material/$ /view_cat.php?cat=1 [L]
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Откуда эта строка берётся? Из базы?
    --- Добавлено ---
    @Emilien, что-то мне кажется, что ваш код приводит к циклической переадресациии
     
  4. Emilien

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

    С нами с:
    30 июн 2016
    Сообщения:
    246
    Симпатии:
    156
    @mkramer, это только кажется. Использование %{THE_REQUEST} как раз и позволяет избежать зацикливания, так как эта переменная содержит не результат преобразований, а исходный запрос клиента.
     
  5. mike_stepanov

    mike_stepanov Новичок

    С нами с:
    28 май 2015
    Сообщения:
    6
    Симпатии:
    0
    Спасибо всем за ответы. Все работает.
     
  6. mike_stepanov

    mike_stepanov Новичок

    С нами с:
    28 май 2015
    Сообщения:
    6
    Симпатии:
    0
    @mkramer да, из sql базы
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Так можно же тогда проще сделать
    Код (Text):
    1.  
    2. RewriteBas /
    3. RewriteRule ^([0-9A-z]+)/$ /view_cat.php?cat_slug=$1 [L]
    А в view_cat.php уже искать категорию в базе данных не по id а по cat_slug. Так при добавлении новых категорий не придётся переписывать htaccess (регулярку не отлаживал, но вроде должна работать)
     
  8. mike_stepanov

    mike_stepanov Новичок

    С нами с:
    28 май 2015
    Сообщения:
    6
    Симпатии:
    0
    @Emilien, я нашел баг:
    Когда идешь на второю страницу категории,
    Код (Text):
    1. view_cat.php?cat=1&page=2
    То почему-то не переводит на
    Код (Text):
    1. 11klassniki&page=2
    остается также как без .htaccess, .../view_cat.php?cat=1&page=2
     
    #8 mike_stepanov, 3 июл 2016
    Последнее редактирование: 3 июл 2016