среди всех вопросов «перенаправление в 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-адреса перенаправления.