Перепишите в подпутях 404 URL с помощью Nginx - PullRequest
2 голосов
/ 05 апреля 2019

В настоящее время у меня есть основной редирект на дом моего веб-сервера.Однако я хотел бы обработать подпути с перенаправлением после 404 не для дома и да для подпути, то есть с несколькими подпутями.Чтобы не повторять правила, я должен иметь дело с REGEX, однако я не знаю, как вставить эти правила и вернуться к текущему подпути.

home

www.foo.com.br

subpath

www.foo.com.br/machine
www.foo.com.br/cloud
www.foo.com.br/air

сегодня

# define error page
error_page 404 = @notfound;

# error page location redirect 301
location @notfound {
    return 301 /;
}

хотел бы ответить 404

www.foo.com.br/machine/test123  

перейти к

www.foo.com.br/machine/

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Регекс используется для выбора первого поля и перенаправления после 404:

  error_page 404 = @notfound;

  location @notfound {
    rewrite ^/([\w-]*)/.* /$1/ permanent;

В вашем php блоке установите fastcgi_intercept_errors на

  location ~ \.php$ {
    include /etc/nginx/fastcgi_params;
    # intercept errors for 404 redirect
    fastcgi_intercept_errors on;
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
0 голосов
/ 05 апреля 2019

Вы можете добавить rewrite правила перед оператором return, чтобы они соответствовали определенным подкаталогам, которые вы хотите обрабатывать по-разному.

Например:

location @notfound {
    rewrite ^/(machine|cloud|air)/. /$1/ permanent;
    return 301 /;
}

См. этот документ для деталей.

...