Примеры NGINX редиректов — 301й редирект, приоритет location, включение ЧПУ, по GET условию переменной …


Довольно часто приходиться использовать редиректы, и правильнее всего это реализовывать конечно же в фронтенде — то есть средствами NGINX,
а в идеале вообще отказаться от использования htaccess или вообще от аппача — значительно ускорим работу сайта.

И первой же проблемой после этого встаёт реализация всех редиректов ранее работающих в .htaccess
Ну или просто нужно какой нить редирект сделать … делаем его в nginx!

Здесь для себя решил собрать в кучку некоторые используемые мною редиректы.

1. Перенаправление после включения режима ЧПУ
Довольно востребованное т.к. адреса страниц меняются и на работающем проекте это череповато потерей посетителей (в поисковиках старый адрес, а на сайте уже новый).
Лично у меня это часть ТЗ для сайта на платформе 1С Битрикс — только что врубил ЧПУ и нужно было настроить редирект со старых на новые странички.
Редирект из разряда сложных т.к. условие находится в переменных GET запроса и сделать Location по этому условию непонятно как
/dir/?ELEMENT_ID=777 на /dir/777/

моё решение (несколько напрягает присутствие if — конфиг nginx с условием заведомо считается неудачным, но как по-другому я не нашел ):
location ~ /dir/ {
if ( $args ~* (.*)ELEMENT_ID=(.*) )
{
set $element_id $2;
set $args '';
rewrite ^(.*)$ /dir/$ELEMENT_ID/ permanent;
}
proxy_pass $proxyserver;
}

2. 301й редирект с сайта с www на сайт без www или наоборот
Реализуется на уровне директивы server
server {
listen 80;
server_name site.ru;
rewrite ^ http://www.site.ru$request_uri? permanent;
}

server {
listen 80;
server_name www.site.ru;
.
.
.


3. Редирект с конкретной страницы на конкретную страницу


location = /price.html { rewrite ^(.*)$ /price.php; }

4. Редирект по условию с передачей переменной /obl/777/ на /obl.php?obl_idx=777

location /obl/ { rewrite /obl\/(.*)$ /obl.php?obl_idx=$1; }

5. Редирект всех несуществующих файлов на index.php (такой редирект пригодится для многих CMS например Joomla)

location / {
try_files $uri $uri/ /index.php$is_args$args;
}

location ~ \.php$ {
fastcgi_index index.php;
include fastcgi_params;
.
.


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

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