Назад | Перейти на главную страницу

nginx возвращает 301 / перенаправление

среди всех вопросов «перенаправление в nginx» я не смог найти, как перенаправить (используя return 301, а лучше без «если») с помощью регулярных выражений.

У меня есть ссылка на мой сайт, и я хочу удалить параметр a end:

domain.com/article/some-sluggish-link/?report=1        #number at end

Regex, чтобы найти это:

\?report=\d*$

Для этого я хочу перенаправить 301 на:

domain.com/article/some-sluggish-link/

В nginx.conf у меня есть 3 перенаправления:

server {        
    listen 80;      
    server_name subdomain.example.com.; #just one subdomain 
    }

server {
    listen 80;
    server_name  *.example.com;         
    return 301 http://example.com$request_uri;
    }

server {
    listen 80;
    server_name  example.com;
    }

и это работает; он перенаправляет 301 все www., ww., aaa. и все поддомены, кроме одного, на основной домен.com

Буду признателен за любую помощь Ура!

РЕДАКТИРОВАТЬ 25/03/2015

У меня уже есть "location /" в моем файле conf:

location / {  
    uwsgi_pass unix://opt/run/ps2.sock;  
    include uwsgi_params;  
    }

который перенаправляет на какое-то приложение django. После применения предложения if это дает мне бесконечный цикл !!!

Моя проблема в основном связана с SEO, что означает, что Google индексирует некоторые определенные страницы (с параметром? Report =), которые являются копиями URL-адресов без этого конечного параметра.

Я хотел, чтобы googlebot перестал индексировать с помощью robots.txt, но проблема в том, что вы не можете использовать регулярные выражения в этом файле. Также я не могу сказать, какой именно URL-адрес должен быть перенаправлен или остановлен от индексации, потому что это происходит как-то случайно ...

Я сам не пробовал, но должно работать. Добавьте это в свой серверный {} блок:

location / {
    if ($args !~ ^$) {
        rewrite ^ $request_uri? permanent;
    }
}

Что на самом деле делает этот блок:

location / сообщает nginx о необходимости применения этих директив ко всем запросам, соответствующим корневому каталогу и подкаталогам.

if ($args !~ ^$) проверяет, содержит ли URI какие-либо параметры запроса с регулярным выражением.

rewrite ^ $request_uri? permanent; выполняет перенаправление на желаемый URI без каких-либо параметров запроса. В ? в конце $ request_uri сообщает nginx, что нужно удалить параметры запроса из URL-адреса перенаправления.