Как перенаправить на внешний сайт из каталога (с URL с этого сайта) - PullRequest
1 голос
/ 08 апреля 2020

На многих моих сайтах существует традиция перенаправления через внутренний каталог. Выглядит так, что внешняя ссылка на Яндекс с site.ru выглядит так:

https://site.ru/out/https: //ya.ru

Этот URL будет перенаправлен на 301 https://ya.ru.

В apache я делаю это в .htaccess:

RedirectMatch 301 /out/(.*)$ 1.

Попытка переписать для nginx, делая это:

rewrite /out/(.*) $1 permanent;

Но он перенаправляется на https://site.ru/ya.ru, а не на https://ya.ru.

Я добавляю эту конфигурацию в my.conf (я создал это файл в / etc / nginx) и выполните «include /etc/nginx/my.conf;» (конечно, на сервере {}) во всех conf-файлах моих сайтов.

Помогите мне, пожалуйста, с конфигурацией, я не могу понять это. (

1 Ответ

2 голосов
/ 08 апреля 2020

Часть проблемы заключается в том, что rewrite использует нормализованный URI, который сложил несколько последовательных / s в один /. Лучше использовать исходный запрос, который хранится в $request_uri.

. Одним из возможных решений является использование map для извлечения встроенного URL. Например:

map $request_uri $redirect {
    default 0;
    ~^/out/(?<out>.*)$ $out;
}

server {
    ...
    if ($redirect) { return 301 $redirect; }
    ...
}

Подробнее см. в этом документе и это предупреждение об использовании if.


Вы можете достичь того же, не используя map, используя:

if ($request_uri ~ ^/out/(.*)$) { return 301 $1; }
...