Помогите с чпу

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем SocMaster, 15 дек 2014.

  1. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    Не могу составить правильное правило для чпу
    /yamalo-neneckiy_ao_gubkinskiy/ac/ace/
    в первой части можно использовать подчеркивание,дефис,цифры и буквы
    вторая и третья часть,так же подчеркивание,дефис,цифры и буквы
     
  2. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    191
    Для прописания правил в .htaccess нужно знать что на что заменять.
    Вы написали что-то — то ли что заменять, то ли на что заменять надо.
    Напишите оба правила. И так, чтобы всем было понятно.
    Как — есть.
    И как — надо чтобы было.
     
    Последнее редактирование: 15 дек 2014
  3. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    Сейчас стоит такое правило. не рабочее
    RewriteRule ^(.+)/?(\w+)?/?(\w+)?/$ index.php?g=$1&mode=search&mark=$2&model=$3&%{QUERY_STRING} [L]
    (.+) - транслит города
    (\w+) - марка авто (не обз)
    (\w+) - модель авто (не обз)
     
  4. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    188
    Симпатии:
    227
    Проблема в том, что по умолчанию, квантификаторы являются "жадными”.
    Первая скобка захватит все её нужно поменять на (.+?)
    ^(.+?)/?(\w+)?/?(\w+)?/$
     
  5. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    Работает..но не правильно
    вот правила

    RewriteRule ^(.+?)/$ index.php?g=$1 [QSA]

    RewriteRule ^(.+?)/[\w\-]+[^/]$ %{REQUEST_URI}/ [R=301,QSA]
    RewriteRule ^(.+?)/([\w\-]+)/$ index.php?g=$1&mark=$2 [QSA]

    RewriteRule ^(.+?)/(\w+)/(\w+)/[\d]{4}\/id([\d]+)$ index.php?g=$1&mode=card&id=$4&mark=$2&model=$3 [QSA]
    RewriteRule ^(.+?)/?(\w+)?/?(\w+)?/$ index.php?g=$1&mode=search&mark=$2&model=$3&%{QUERY_STRING} [L]

    вместо вот этого RewriteRule ^(.+?)/$ index.php?g=$1 [QSA]
    то есть такой урл /yamalo-neneckiy_ao_gubkinskiy/
    срабатывает вот это правило новое
    RewriteRule ^(.+?)/?(\w+)?/?(\w+)?/$ index.php?g=$1&mode=search&mark=$2&model=$3&%{QUERY_STRING} [L]
     
  6. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    188
    Симпатии:
    227
    Код:
    RewriteEngine on
    
    RewriteRule ^([^/]+)/$ index.php?g=$1 [L,QSA]
    
    RewriteRule ^(.+?)/[\w\-]+[^/]$ %{REQUEST_URI}/ [R=301,QSA]
    
    RewriteRule ^([^/]+)/([\w\-]+)/$ index.php?g=$1&mark=$2 [QSA]
    
    RewriteRule ^([^/]+)/(\w+)/(\w+)/[\d]{4}\/id([\d]+)$ index.php?g=$1&mode=card&id=$4&mark=$2&model=$3 [QSA]
    RewriteRule ^([^/]+)/?(\w+)?/?(\w+)?/$ index.php?g=$1&mode=search&mark=$2&model=$3&%{QUERY_STRING} [L]