За последние 24 часа нас посетили 34474 программиста и 1752 робота. Сейчас ищут 986 программистов ...

Помогите с Rewrite Rule без смены URI

Тема в разделе "PHP для новичков", создана пользователем Ежи, 25 авг 2016.

  1. Ежи

    Ежи Новичок

    С нами с:
    25 авг 2016
    Сообщения:
    4
    Симпатии:
    0
    Доброго времени суток!
    Кто-нибудь из форумчан может помочь с правилом для .htaccess?

    Мне нужно при запросе site.ru/catalog/?arrFilter_18_MIN=&arrFilter_18_MAX=&arrFilter_711_3163876399=Y&arrFilter_38_MIN=&arrFilter_38_MAX=&arrFilter_40_MIN=&arrFilter_40_MAX=&set_filter=Показать
    открывалась страница фильтра, но в урл был ЧПУ - site.ru/catalog/sale_flats/energostroitel

    Я сделал так

    Код (Text):
    1. RewriteRule ^catalog/sale_flats/energostroitel$ /catalog/sale_flats/?arrFilter_18_MIN=&arrFilter_18_MAX=&arrFilter_711_3163876399=Y&arrFilter_38_MIN=&arrFilter_38_MAX=&arrFilter_40_MIN=&arrFilter_40_MAX=&set_filter=Показать&%{QUERY_STRING} [L,R=301,NC]
    это перенаправление, рабочее, но URI меняется.

    Как же составить правило, чтобы URI не менялся, а оставался /catalog/sale_flats/energostroitel

    и ещё чтобы при обратном запросе также показывался короткий URI
    Уже голову сломал, помогите, уважаемые форумчане!!

    Мой .htaccess
    Код (Text):
    1. Options -Indexes
    2. ErrorDocument 404 /404.php
    3.  
    4. <IfModule mod_php5.c>
    5.   #php_flag allow_call_time_pass_reference 1
    6.   #php_flag session.use_trans_sid off
    7.   php_flag register_globals off
    8.   php_value display_errors 1
    9.   php_value mbstring.func_overload 2
    10.   php_value mbstring.internal_encoding UTF-8
    11. </IfModule>
    12.  
    13. <IfModule mod_rewrite.c>
    14.   Options +FollowSymLinks -MultiViews
    15.   RewriteEngine On
    16.  
    17.   RewriteBase /
    18.   RewriteRule ^flat(\/.*)?$ /catalog/sale_flats$1/  [L,R=301,NC]
    19.  
    20.   RewriteRule ^catalog/sale_flats/energostroitel$ /catalog/sale_flats/?arrFilter_18_MIN=&arrFilter_18_MAX=&arrFilter_711_3163876399=Y&arrFilter_38_MIN=&arrFilter_38_MAX=&arrFilter_40_MIN=&arrFilter_40_MAX=&set_filter=Показать&%{QUERY_STRING} [R,L]
    21.  
    22.  
    23.  
    24.  
    25.   RewriteCond %{REQUEST_FILENAME} !-f
    26.   RewriteCond %{REQUEST_FILENAME} !-l
    27.   RewriteCond %{REQUEST_FILENAME} !-d
    28.   RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
    29.   RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
    30.  
    31.   RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
    32.  
    33. </IfModule>
    34.  
    35. <IfModule mod_dir.c>
    36.   DirectoryIndex index.php index.html
    37. </IfModule>
    38.  
    39. <IfModule mod_expires.c>
    40.   ExpiresActive on
    41.   ExpiresByType image/jpeg "access plus 3 day"
    42.   ExpiresByType image/gif "access plus 3 day"
    43.   ExpiresByType image/png "access plus 3 day"
    44.   ExpiresByType text/css "access plus 3 day"
    45.   ExpiresByType application/javascript "access plus 3 day"
    46. </IfModule>
    47. AddDefaultCharset utf-8
    48. AddType 'text/html; charset=utf-8' .html .htm .shtml
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Рерайтер работает при разрешении запроса. Он не фильтрует и не переписывает урлы в выходном потоке. Вывод: переписывать надо свой код, чтоб он выводил урлы в нужном чпу-формате.
     
    Ежи нравится это.
  3. Ежи

    Ежи Новичок

    С нами с:
    25 авг 2016
    Сообщения:
    4
    Симпатии:
    0
    Ладно, понял, спасибо, на вывод из фильтра URL в таком формате забью, ибо на это уйдёт слишком много времени вся логика фильтра на данный момент работает именно на GET параметрах из URI.

    Подскажите тогда как оставить URL от ЧПУ в адресной строке, а подгрузить редирект.

    Я видел правила и некоторые пробовал, они работают, но я не могу подобрать под свой конкретный случай.
    Имхо, нужно менять последний параметр RewriteRule - L/P/NC, но что именно писать я не знаю.
    Подскажите, пожалуйста.
     
  4. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Подробнее опиши что ты хочешь. Что такое "оставить урл от чпу". Урл он один. Тот, который ты изначально сгенерировал, отдал, и по которому пользователь сделал запрос. Вот на моменте этого запроса включается рерайтер.
     
    Ежи нравится это.
  5. Ежи

    Ежи Новичок

    С нами с:
    25 авг 2016
    Сообщения:
    4
    Симпатии:
    0
    Застрял на таком моменте
    Код (Text):
    1. RewriteRule ^(.*)/(.*)/roshino$ /catalog/sale_flats/?arrFilter_18_MIN=&arrFilter_18_MAX=&arrFilter_711_2854278298=Y&arrFilter_38_MIN=&arrFilter_38_MAX=&arrFilter_40_MIN=&arrFilter_40_MAX=&set_filter=%D0%9F%D0%BE%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D1%8C [L]
    Если пишу [P] - идёт редирект куда надо, но URI меняется
    Если пишу [L] - URI нужный,остаётся в адресной строке, но редиректит, не туда куда нужно. Если знакомы с Битриксом то в catalog.section.list или в catalog/index.php, не могу понять, как заставить это работать. Второй день бьюсь.