Machez
@Machez
Бу!

Какой должна быть регулярка для RewriteRule что бы переписывать определенный GET-параметр?

Есть URL вида /news?page=3&utm=ex

Задача: перенаправлять все подобные URL на /news/page-3?utm=ex

При этом параметр page может стоять в любом месте, т.е. не обязательно быть первым после знака вопроса и конечно же он может быть единственным параметром, а может быть одним из набора...

Подскажите как сформироват правило RewriteRule
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
@dodo512
Если нужно удалить из %{QUERY_STRING} только page, а остальные параметры оставить как есть.
RewriteCond &%{QUERY_STRING} ^(.*?)&page=([^&]+)(.*)
RewriteCond /$1/page-%2?%1%3 ^(.+?\?)&*(.*)
RewriteRule ^(news)$ %1%2 [R=301,L]


Ещё вариант.
RewriteCond %{QUERY_STRING} ^()page=([^&]+)&*(.*)  [OR]
RewriteCond %{QUERY_STRING} ^(.*?)&page=([^&]+)(.*)
RewriteRule ^(news)$ /$1/page-%2?%1%3 [R=301,L]


Если полагаться на то, что Apache сам удалит лишний символ & в конце строки ?utm=ex&, то сойдёт и так.
RewriteCond %{QUERY_STRING} ^(|.*?&)page=([^&]+)&*(.*)
RewriteRule ^(news)$ /$1/page-%2?%1%3 [R=301,L]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы