СОВМЕЩЕНИЕ РАЗНЫХ ЧПУ

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

Статус темы:
Закрыта.
  1. lordBlack

    lordBlack

    Регистр.:
    29 ноя 2007
    Сообщения:
    620
    Симпатии:
    246
    тема на саммо деле очень и очень серьезная....

    PHP:
    #Юзеры
    RewriteRule ^([_A-Za-z0-9-]+).html/?$ my.php?user=$[L,QSA]
    #делает ссылки вида: http://сайт.ру/user.html

    #галерея
    RewriteRule ^([^.]+)$ /img/index.php [QSA]
    #делает ссылки вида: http://сайт.ру/img/
    #и все что внутри http://cайт.ru/img/gallery/1/11
    #вообщем правило на протокол php

    хочу добавить еще одно правило на создание виртуальной папки doc
    PHP:
    RewriteRule ^doc/?$ doc.php [L]

    НО при ображещении http://сайт.ру/doc/
    меня выкидывает на папку http://сайт.ру/img/ вернее открывает галерею....

    да и вообще при попытке открытия всех папок ооткрывает теперь галерею...
    Хорошо...пусть так... в ненужных папках прописал
    РеврайтЕнджини ОФФ

    НО...как исправить положение в виртуальных папках????
    которые хочу создать.....
     
  2. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    1. Вариант 1
    Код:
    RewriteRule ^([^.]+)$ /img/index.php [QSA]
    
    Обрабатывает все запросы к сайту. Самые глобальные правила надо размещать ниже, чем конкретные. При чем конкретизированные правила желательно заканчивать аттрибутом L, чтобы дальнейшие правила к этому урлу уже не применялись. т.е. делать так
    Код:
    RewriteRule ^doc/?$ doc.php [L] 
    RewriteRule ^([_ A-Za-z0-9-]+).html/?$ my.php?user=$1 [L,QSA]
    RewriteRule ^([^.]+)$ /img/index.php [QSA]
    
    2. Вариант 2
    Явно указать правилу с img, что запросы имеющие в себе doc не обрабатывать
    Код:
    RewriteCond %{REQUEST_URI} !^/doc 
    RewriteRule ^([^.]+)$ /img/index.php [QSA]
    
     
    lordBlack нравится это.
  3. lordBlack

    lordBlack

    Регистр.:
    29 ноя 2007
    Сообщения:
    620
    Симпатии:
    246
    запуталсо:
    есть 4 вида ссылок:

    линк каталога статей:
    /doc.php?cat=9
    RewriteRule ^doc/(.*)/?$ doc.php?cat=$1 [L,QSA]
    получаем на выходе /doc/9

    далее подкаталог
    /doc.php?cat=9&subcat=18
    RewriteRule ^doc/(.*)/(.*) /doc.php?cat=$1&subcat=$2 [L,QSA]
    по идее должно получитсо на выходе: /doc/9/18 и вывести содержимое подкаталога.... но он не хочет!

    дальше еще веселее:
    /doc.php?page=1&id=10&cat=9
    /doc.php?page=1&id=10&cat=9&subcat=18

    как реализовать правило на них ??????????
    PHP:
    /doc.php?cat=(каталог)
    /
    doc.php?cat=9&subcat=18 (подкаталог)
    /
    doc.php?page=1&id=10&cat=(статья вне каталога-подкаталога)
    /
    doc.php?page=1&id=10&cat=9&subcat=18 (статья подчиненная подкаталогу)
    запуталсо вообщем...
     
  4. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    Код:
    RewriteRule ^doc/(.*)/(.*)/(.*)/(.*)$ /doc.php?page=$1&id=$2&cat=$3&subcat=$4 [L]
    RewriteRule ^doc/(.*)/(.*)/(.*)$ /doc.php?page=$1&id=$2&cat=$3 [L]
    RewriteRule ^doc/(.*)/(.*)$ /doc.php?cat=$1&subcat=$2 [L]
    RewriteRule ^doc/(.*)$ /doc.php?cat=$1 [L]
    
    А надо ли вообще qsa? я не вижу необходимости
     
  5. lordBlack

    lordBlack

    Регистр.:
    29 ноя 2007
    Сообщения:
    620
    Симпатии:
    246
    не работает. причем если закоментировать
    RewriteRule ^doc/(.*)$ /doc.php?cat=$1 [L]
    то второе правило начинает работать
    RewriteRule ^doc/(.*)/(.*)$ /doc.php?cat=$1&subcat=$2 [L]

    вот что вообще внутри htaccess
    PHP:
    php_value date.timezone "Europe/Moscow"
    RemoveHandler .php .phtml .php3 .php4
    RewriteEngine On
    php_value memory_limit 25M
    php_flag register_globals off


    Options 
    +FollowSymlinks
    #профили
    RewriteRule ^([_A-Za-z0-9-]+).html/?$ my.php?user=$[L,QSA]
    #интересы
    RewriteRule ^([\_A-Za-z0-9-]+)/(.*).html /my.php?user=$1&action=$[L,QSA]

    #блоги
    RewriteRule ^blog/?$ blogs.php [L]
    RewriteRule ^blog/([_A-Za-z0-9-]+).htm /blogs.php?user=$[L,QSA]
    RewriteRule ^blog/([_A-Za-z0-9-]+)/(.*).htm /blogs.php?user=$1&id=$[L,QSA]

    #теория
    RewriteRule ^doc/(.*)$ /doc.php?cat=$[L]
    RewriteRule ^doc/(.*)/(.*)$ /doc.php?cat=$1&subcat=$[L]
    RewriteRule ^doc/(.*)/(.*)/(.*)$ /doc.php?page=$1&id=$2&cat=$[L]
    RewriteRule ^doc/(.*)/(.*)/(.*)/(.*)$ /doc.php?page=$1&id=$2&cat=$3&subcat=$[L]

    ErrorDocument 404 /404.html
    ErrorDocument 403 
    /403.html

    #галерея
    RewriteRule ^([^.]+)$ /img/index.php [QSA]
     
  6. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    Человек, ты издеваешься? я же сказал конкретные вопросы должны стоять выше чем более общие. Зачем ты поменял порядок правил которые я тебе написал? Читай манул по htaccess в каком порядке обрабатываются правила!
    Хотя бы даже и тут http://www.beget.ru/art9.html
     
    lordBlack нравится это.
  7. lordBlack

    lordBlack

    Регистр.:
    29 ноя 2007
    Сообщения:
    620
    Симпатии:
    246
    Все, я учел ошибки...и сразу все заработало.
     
Статус темы:
Закрыта.