301 редирект по параметрам URL средствами php, apache, nginx


В многочисленных статьях по 301му редиректу обычно используют самые тривиальные случаи — с www на без www, с одной директории на другую и пр.
В моём случае необходимо было метнуть со странички с параметром ?param=value1…. на ?param=value2…. (какие именно писать не буду).
Небольшая сложность в таком подходе в том что ни аппач, ни nginx параметры не считают адресом странички.
С вариантом на php всё как обычно — просто решил его добавить до полноты картины 🙂
С него и начнём как с самого простого, но и самого неэффективного

Выдёргиваем нужный параметр value1 через $_REQUEST меняем что нужно, и редиректим куда нужно

header(«HTTP/1.1 301 Moved Permanently»);
header(«Location: http://……….);
exit();

Далее, вариант с аппачем — регулярное выражение необходимо наложить на QUERY_STRING
Правим .htaccess

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^param=value1(.+)$
RewriteRule ^(.*)$ $1?param=value2%1 [R=301,L]

И последний — самый эффективный nginx — тут параметры лежат в переменной $args

if ($args ~* (.*)param=value1(.+)) {
set $args $1param=value2$2;
rewrite ^(.*)$ $1 permanent;
}


Один комментарий на «“301 редирект по параметрам URL средствами php, apache, nginx”»

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *