Як перенаправити один URL в nginx?


111

Я перебуваю в процесі реорганізації структури URL. Мені потрібно встановити правила переспрямування для конкретних URL-адрес - я використовую NGINX.

В основному щось подібне:

http://example.com/issue1 --> http://example.com/shop/issues/custom_issue_name1
http://example.com/issue2 --> http://example.com/shop/issues/custom_issue_name2
http://example.com/issue3 --> http://example.com/shop/issues/custom_issue_name3

Дякую!


3
Це "isse" чи "issue" ?! Відповіді припускають "питання" ...
Меттью Вілкокссон

це випуск, виправлено помилку
друку

Відповіді:


122

Помістіть це в директиві вашого сервера:

location /issue {
   rewrite ^/issue(.*) http://$server_name/shop/issues/custom_issue_name$1 permanent;
 }

Або скопіюйте його:

location /issue1 {
   rewrite ^/.* http://$server_name/shop/issues/custom_issue_name1 permanent;
}
location /issue2 {
   rewrite ^.* http://$server_name/shop/issues/custom_issue_name2 permanent;
}
 ...

139
location ~ /issue([0-9]+) {
    return 301 http://example.com/shop/issues/custom_isse_name$1;
}

@Cybolic Я щойно тестував це на зображенні докера з версією, 1.10.3і це було чудово, чи можете ви якось надати свій конфігураційний файл? Вам, мабуть, щось не вистачає.
Мохаммед АбуШаді

34

Якщо вам потрібно скопіювати більше кількох переспрямувань, ви можете скористатися картою:

# map is outside of server block
map $uri $redirect_uri {
    ~^/issue1/?$    http://example.com/shop/issues/custom_isse_name1;
    ~^/issue2/?$    http://example.com/shop/issues/custom_isse_name2;
    ~^/issue3/?$    http://example.com/shop/issues/custom_isse_name3;
    # ... or put these in an included file
}

location / {
    try_files $uri $uri/ @redirect-map;
}

location @redirect-map {
    if ($redirect_uri) {  # redirect if the variable is defined
        return 301 $redirect_uri;
    }
}

4
Це те, що я прийшов сюди, шукаючи - розміщення їх у включеному файлі - це відмінний спосіб замінити мій .htaccess файл, повний RewriteRules з apache.
Джош з Карібу

3
як би ви поєднали цей підхід до карти з існуючим налаштуванням типу / ... proxy_pass?
Майкл Даусман

У @redirect-mapмісці, де ви можете спробувати, if ($redirect_uri = "") {return 404;}слід і проксі-пропуск. Можливо, потрібно переписати, використовуючи $redirect_uri.
Коул Тірні

Це може знадобитися замість 2 locationблоків залежно від налаштувань. Наприклад, для Craft CMS. location ~ ^(.*)$ { if ($redirect_uri) { # redirect if the variable is defined return 301 $redirect_uri; } try_files $uri $uri/ /index.php?p=$uri&$args; }
luwes
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.