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

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

  1. Sumberg

    Sumberg Постоялец

    Регистр.:
    1 авг 2006
    Сообщения:
    53
    Симпатии:
    40
    Есть cms'ка open classifieds, в которой для родительских категорий в url вставляется буква "l",

    например, род категория _http://open-classifieds.com/demo171/l/housing/

    родительская категория с определенным районом

    _http://open-classifieds.com/demo171/l/housing/cataluna/

    Если убрать из url'а букву l, то родительская категория прекрасно отображается, при этом url с категорией+районом становится нерабочим.

    Подскажите, что нужно изменить в htaccess, чтобы заработал последний линк без l, т.е. вида _http://open-classifieds.com/demo171/housing/cataluna/

    Код .htaccess:


    Код:
    
    ErrorDocument 404 /content/404.php
    Options All -Indexes
    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    
    #RewriteRule ^([0-9]+)$ index.php?page=$1 [QSA,L]
    RewriteRule ^admin/$ admin/index.php [L]
    RewriteRule ^rss/$ content/feed-rss.php [L]
    RewriteRule ^rss/(.+)/(.+)/$ content/feed-rss.php?category=$1&location=$2 [L]
    RewriteRule ^rss/(.+)/$ content/feed-rss.php?category=$1 [L]
    RewriteRule ^rss/location/(.+)/$ content/feed-rss.php?location=$2 [QSA,L]
    RewriteRule ^manage/$ content/item-manage.php [L]
    RewriteRule ^publish-a-new-ad.html$ content/item-new.php [L]
    RewriteRule ^need.html$ content/item-need.php [L]
    RewriteRule ^contact.html$ content/contact.php [L]
    RewriteRule ^terms.html$ content/terms.php [L]
    RewriteRule ^privacy-policy.html$ content/privacy.php [L]
    RewriteRule ^sitemap.html$ content/site-map.php [L]
    RewriteRule ^advanced-search.html$ content/search.php [L]
    RewriteRule ^map.html$ content/map.php [L]
    RewriteRule ^register-new-account.html$ content/account/register.php [L]
    RewriteRule ^login.html$ content/account/login.php [L]
    RewriteRule ^logout.html$ content/account/logout.php [L]
    RewriteRule ^forgot-my-password.html$ content/account/recoverpassword.php [L]
    RewriteRule ^settings.html$ content/account/settings.php [L]
    RewriteRule ^my-account/$ content/account/index.php [L]
    #RewriteRule ^offer/(.+)/(.+)/$ index.php?category=$1&type=0&location=$2 [L]
    #RewriteRule ^offer/(.+)$ index.php?category=$1&type=0 [L]
    RewriteRule ^offer/(.+)/(.+)/([0-9]+)$ index.php?category=$1&type=0&location=$2&page=$3 [L]
    RewriteRule ^offer/(.+)/([0-9]+)$ index.php?category=$1&type=0&page=$2 [L]
    RewriteRule ^need/(.+)/(.+)/$ index.php?category=$1&type=1&location=$2 [L]
    RewriteRule ^need/(.+)$ index.php?category=$1&type=1 [L]
    RewriteRule ^location/(.+)/$ index.php?location=$1 [L]
    RewriteRule ^location/(.+)/([0-9]+)$ index.php?location=$1&page=$2 [L]
    [B]RewriteRule ^(.+)/(.+)/(.+)/$ index.php?category=$2&location=$3 [L][/B]
    RewriteRule ^(.+)/(.+)/$ index.php?category=$2 [L]
    RewriteRule ^category/(.+) $1/ [R=301,L]
    RewriteRule ^(.+)/$ index.php?category=$1 [L]
    RewriteRule ^(.+)/(.+)/([0-9]+)$ index.php?category=$2&page=$3 [L]
    RewriteRule ^(.+)/([0-9]+)$ index.php?category=$1&page=$2 [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/(.+)/(.+)/(.+)$ /$3/$4-$1.html$ [R=301,L]
    RewriteRule ^(.+)/(.+)/(.+)-([0-9]+).html$  item.php?category=$2&item=$4 [L]
    RewriteRule ^(.+)/(.+)-([0-9]+).html$  item.php?category=$1&item=$3 [L]
    </IfModule>
    

    Заранее спасибо!
     
  2. DMS

    DMS Злодей

    Moderator
    • Супермодератор
    Регистр.:
    22 окт 2010
    Сообщения:
    631
    Симпатии:
    348
    Поменяй пути в шаблоне который отвечает за вывод категорий
     
  3. Sumberg

    Sumberg Постоялец

    Регистр.:
    1 авг 2006
    Сообщения:
    53
    Симпатии:
    40
    Уже убирал в функции, отвечающей за вывод:

    Код:
    if ($category!="") $url='/l/'.$category.'/'.$locationurl;
    //if ($category!="") $url='/'.$category.'/'.$locationurl;
    else $url= "/";
    
    Насколько я понял, проблема не с генерацией ссылки родит. категории в менюшке,
    а с отображением. В коде ничего такого больше не нашел, остался только htacccess. А вот на что поменять
    RewriteRule ^(.+)/(.+)/(.+)/$ index.php?category=$2&location=$3 [L]

    так до меня и не дошло (
     
  4. Conwell

    Conwell

    Регистр.:
    23 мар 2009
    Сообщения:
    337
    Симпатии:
    177
    при убирании в шаблоне "/l/"
    необходимо будет заменить в .htaccess эту строку:
    RewriteRule ^(.+)/(.+)/(.+)/$ index.php?category=$2&location=$3 [L]
    на вот это:
    RewriteRule ^(.+)/(.+)/$ index.php?category=$1&location=$2 [L]
    ибо количество параметров и выдача меняются, да и сама ссылка другого вида получается.
     
  5. Sumberg

    Sumberg Постоялец

    Регистр.:
    1 авг 2006
    Сообщения:
    53
    Симпатии:
    40
    так заработало то, что я просил, но перестали работать дочерние категории, например

    раньше работало:
    родительская категория:
    site.ru/квартиры-комнаты
    site.ru/l/квартиры-комнаты
    site.ru/l/квартиры-комнаты/москва
    site.ru/l/квартиры-комнаты/комсомольская

    дочерние:
    site.ru/квартиры-комнаты/однокомнатные
    site.ru/квартиры-комнаты/однокомнатные/москва
    site.ru/квартиры-комнаты/двухкомнатные
    site.ru/квартиры-комнаты/двухкомнатные/комсомольская

    раньше не работало:
    site.ru/квартиры-комнаты/москва

    сейчас работает:
    site.ru/квартиры-комнаты/москва
    site.ru/квартиры-комнаты/комсомольская

    сейчас не работает:

    site.ru/квартиры-комнаты/однокомнатные
    site.ru/квартиры-комнаты/однокомнатные/москва
    site.ru/квартиры-комнаты/двухкомнатные
    site.ru/квартиры-комнаты/двухкомнатные/комсомольская

    Т.е. все дочерние. Как бы объединить "раньше" и "сейчас", чтобы все заработало)
     
  6. Conwell

    Conwell

    Регистр.:
    23 мар 2009
    Сообщения:
    337
    Симпатии:
    177
    такое ощущение что там в выводе в шаблоне по другому реализованы переменные. можно кусок кода отвечающий за вывод дочерних? как получается что $location = однокомнатные/москва?
     
  7. Sumberg

    Sumberg Постоялец

    Регистр.:
    1 авг 2006
    Сообщения:
    53
    Симпатии:
    40
    Пожалуйста


    Код:
    function catURL($category,$subcat="",$location=""){//returns de url for the category, if you change this be aware that you need to change it in the .htaccess as well.
       if (LOCATION){
           if (isset($location)) if ($location=="") global $location;
           
           $locationurl = "";
           if ($location!=""){
                if (is_numeric($location)){
                    if(FRIENDLY_URL) $locationurl = getLocationFriendlyName($location)."/";
                    else $locationurl = "&location=".getLocationFriendlyName($location);
                } else {
                    if(FRIENDLY_URL) $locationurl = $location."/";
                    else $locationurl = "&location=$location";
                }
                
                if ($category=="" && $subcat == "") /*$category = strtolower(_("Classifieds"));*/$category = 'location';
           }
           
           if(FRIENDLY_URL){
               if ($subcat!="" && $category!=$subcat)  $url='/'.$fix.$subcat.'/'.$category.'/'.$locationurl; 
               else {
                    if (/*$category == strtolower(_("Classifieds"))*/$category == 'location') $url='/'.$category.'/'.$locationurl;
                    else {
                        //if ($category!="") $url='/l/'.$category.'/'.$locationurl;
                        if ($category!="") $url='/'.$category.'/'.$locationurl;
                        else $url= "/";
                    }
               }
           }
           else {//no friendly url activated
                if ($category!="") $url='/?category='.$category.$locationurl;
                else $url= "/";
           }
       } else {
           if(FRIENDLY_URL){
               if ($subcat!="" && $category!=$subcat)  $url='/'.$subcat.'/'.$category.'/'; 
               else  $url='/'.$category.'/';  
           }
           else $url='/?category='.$category;//no friendly url activated
       }
    
       return $url;
    }
    
     
  8. Conwell

    Conwell

    Регистр.:
    23 мар 2009
    Сообщения:
    337
    Симпатии:
    177
    Весело в функции генерируется ссылка :) ничего не скажешь.
    Возможые варианты развития:
    -возвращаем обратно букву "l"
    -меняем логику вывода url, изменяем правила в htaccess
    -добавляем еще правила в htaccess
    Скорее всего последний вариант предпочтительней -
    перед правилом
    RewriteRule ^(.+)/(.+)/$ index.php?category=$1&location=$2 [L]
    добавить вот такое:
    RewriteRule ^(.+)/(.+)/(.+)/$ index.php?category=$2&location=$3 [L]
    то есть почти вернутся к оригиналу :)
     
    Sumberg нравится это.
  9. Sumberg

    Sumberg Постоялец

    Регистр.:
    1 авг 2006
    Сообщения:
    53
    Симпатии:
    40
    Теперь

    Не работает
    site.ru/квартиры-комнаты/однокомнатные

    Работает
    site.ru/квартиры-комнаты/однокомнатные/москва

    И rss почему то сломался(