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

andystill

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

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

PS: Это нужно для создания SEO-фильтра.
 
Код:
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]
 
Назад
Сверху