Помогите правило составить.

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем SkiLLer, 25 мар 2011.

  1. SkiLLer

    SkiLLer

    Регистр.:
    22 авг 2007
    Сообщения:
    307
    Симпатии:
    64
    На сайте должны быть ссылки /sale/, /sale/moskva/ - это должно передаваться как ?filtr=moskva, но еще может быть такое /sale/page/2/, /sale/moskva/page/2/.

    Как сделать, чтобы одно другому не мешало, page,moskva, page - это пагинация, передается ?page=2. На месте moskva может быть что угодно, это будет определятся контентщиками.

    З.Ы. Может непонятно объяснил, напишите, постараюсь подробнее описать.
    Спасибо.
     
  2. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    Код:
    RewriteEngine on
    RewriteBase /
    
    #/sale/
    RewriteRule ^sale?$ sale.php [QSA,L]
    
    #/sale/page/2/
    RewriteRule ^sale/page/([0-9]+)/?$ sale.php?page=$1 [QSA,L]
    
    #/sale/moskva/page/2/
    RewriteRule ^sale/(.*)/page/([0-9]+)/?$ sale.php?filtr=$1&page=$2 [QSA,L]
    
    #/sale/moskva/
    RewriteRule ^sale/(.*)/?$ sale.php?filtr=$1 [QSA,L]
    
    сначала sale, потом страницы, потом фильтр и страницы, дальше что не пройдёт попадёт на фильтр

    есть некоторые спец символы для апача
    Код:
    /
    =
    +
    &
    #
    %
    
    которые используются в ссылках их надо конвертировать если они есть в слове фильтре, например в фильтре слово "avto/moto" с php конвертируем через urlencode будет "avto%2Fmoto" апач когда получит конвертнёт для себя и получит правило /sale/avto/moto/page/2/ и вернёт ошибку 404 страница не найдена, чтоб не было таких проблем надо спец символы конвертировать два раза через urlencode будет "avto%252Fmoto" тогда апач обработает /sale/avto%2Fmoto/page/2/ что попадает под правило, а php автоматически делает urldecode и в $_GET['filtr'] будет значение "avto/moto"
     
    SkiLLer нравится это.
  3. SkiLLer

    SkiLLer

    Регистр.:
    22 авг 2007
    Сообщения:
    307
    Симпатии:
    64
    Да, еще забыл написать, сорри. sale тоже не уникально, sale тоже будет передаваться гет-запросом(в принципе это реализовано). Можно тут придумать что-то, чтоб не описывать каждый параметр отдельно /sale/,/buy/....?
     
  4. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    если список слов sale, buy уже известный тогда заменить sale на (sale|buy)
    Код:
    RewriteRule ^(sale|buy)/?$ $1.php [QSA,L]
    
    если не известно и в словах sale, bay нет символа /
    Код:
    RewriteEngine on
    RewriteBase /htaccess/sale/
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
    #/sale/
    RewriteRule ^([^/]+)/?$ $1.php [QSA,L]
    
    #/sale/moskva/page/2/
    RewriteRule ^([^/]+)/(.*)/page/([0-9]+)/?$ $1.php?filtr=$2&page=$3 [QSA,L]
    
    #/sale/page/2/
    RewriteRule ^([^/]+)/page/([0-9]+)/?$ $1.php?page=$2 [QSA,L]
    
    #/sale/moskva/
    RewriteRule ^([^/]+)/(.*)/?$ $1.php?filtr=$2 [QSA,L]
    
     
    SkiLLer нравится это.