Замена регуляркой пустых переданных GET параметров через .htaccess

Тема в разделе "Регулярные выражения", создана пользователем andystill, 26 окт 2015.

Модераторы: xpert13
  1. andystill

    andystill Постоялец

    Регистр.:
    23 апр 2012
    Сообщения:
    57
    Симпатии:
    6
    Всем доброго времени суток.
    Существует ли в природе универсальный формат регулярки для очистки URL от пустых GET параметров, отправленных формой с гет методом, либо GET параметров со значением 0;
    Регулярка должна удалять такие параметры из строки сразу после отправки формы.
    Это дело можно решить парочкой строк через JS, но необходимо чтобы бот, при отключенном JS переходил на нужные страницы, без дублей и ненужных параметров в URL.
    Пример: сайт.ру/index.html?familia=&name=Вася&otchestvo=0
    Результат: сайт.ру/index.html?name=Вася

    Регулярка не должна зависеть от кол-ва переданных гет-параметров.
    Все спасибо заранее за советы.

    PS: Это нужно для создания SEO-фильтра.
     
  2. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    194
    Симпатии:
    235
    Код:
    RewriteCond %{QUERY_STRING} (.*?)[^&=]+=0?(?:&|$)(.*)
    RewriteRule .* /$0?%1%2 [L,E=VAR:1]
    
    RewriteCond %{ENV:REDIRECT_VAR} =1
    RewriteRule .* /$0 [R=301,L]
    
    Количество пустых параметров, которые может вырезать, ограничено значением LimitInternalRecursion в настройках веб-сервера. Если специально не подкручивали, то по умолчанию LimitInternalRecursion равен 10.
    Масштабировать можно добавлением нужного количества RewriteCond %1%2 (.*?)[^&=]+=0?(?:&|$)(.*) [OR]
    После добавления пары RewriteCond количество вырезаемых пустых параметров возрастает до 30.

    Код:
    RewriteCond %{QUERY_STRING} (.*?)[^&=]+=0?(?:&|$)(.*)
    RewriteCond %1%2 (.*?)[^&=]+=0?(?:&|$)(.*) [OR]
    RewriteCond %1%2 (.*?)[^&=]+=0?(?:&|$)(.*) [OR]
    RewriteRule .* /$0?%1%2 [L,E=VAR:1]
    
    RewriteCond %{ENV:REDIRECT_VAR} =1
    RewriteRule .* /$0 [R=301,L]
    
     
    xpert13 и andystill нравится это.