使用Nginx在子路径404网址中重写

时间:2019-04-05 16:31:29

标签: nginx nginx-location nginx-config

当前,我主要重定向到Web服务器的主页。但是,我想在404不是用于home而是针对具有多个子路径的子路径后,对重定向的子路径进行处理。为了不重复这些规则,我必须处理一个REGEX,但是我不知道如何插入这些规则并返回到当前子路径。

www.foo.com.br

子路径

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 :(得分:0)

您可以在rewrite语句之前添加return规则,以匹配要区别对待的特定子目录。

例如:

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

有关详细信息,请参见this document

答案 1 :(得分:0)

REGEX用来提取第一个字段并在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;
  }