NGINX - 重写和错误404

时间:2016-11-22 20:30:20

标签: nginx configuration url-rewriting nginx-location

我的改写有效。

另一方面,我的404错误重定向不再起作用。

如果我添加到我的.php链接,它会返回我没有文件。

同样当我输入我的链接时,管理员/它会给我打开,菜单和copiryght。

示例如果我将https://mon.domain.com/admin/加载到我的页面,而我想要404错误页面。

我想要的是,如果页面不存在,无论如何我遇到了我的错误404

你能帮助我吗?

以下是nginx的配置:

upstream www {
    server unix:/var/run/php5-fpm.sock;
}

server {
    listen 80 default;
    server_name no-impact.eu;
        return 301 https://my.domain.com;
}
server {
    listen 443 ssl;
    server_name my.domain.com;

    fastcgi_param HTTPS on;
    ssl on;
        ssl_certificate /etc/letsencrypt/live/my.domain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/my.domain.com/privkey.pem;
        ssl_session_timeout  5m;
        ssl_protocols  SSLv2 SSLv3 TLSv1;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers   on;

    root /var/www/my.domain.com/;
    index index.php;

    error_page 400 401 402 403 404 500 502 503 504 /error.html;

    location /.well-known/acme-challenge {
        root /var/www/letsencrypt;
    }

    location = /error.html {
        root  /var/www/my.domain.com/error/;
        index index.html;
    }

    location / {
        index index.php index.html;
        try_files $uri $uri/ @rewrite;
    }

    location @rewrite {
        rewrite ^/([\w-]+)-page-(\d+)$ /index.php?id=$1&page=$2 last;
        rewrite ^/([\w-]+)-(\d+)$ /index.php?id=$1&id_tutoriel=$2 last;
        rewrite ^/(.*)$ /index.php?id=$1 last;
    }


    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

}

1 个答案:

答案 0 :(得分:-1)

这里的问题是你的重写告诉nginx将所有内容重定向到后端,因此nginx本身不会检测到404。然后你的后端处理请求并发送一个404,nginx直接发送回客户端。

为了让nginx拦截404并显示自己的错误页面,您需要将指令fastcgi_intercept_errors on;添加到.php - 位置。