如果本地主机域中不存在子域名,如何让 Nginx 重定向到 404

如果本地主机域中不存在子域名,如何让 Nginx 重定向到 404

这是我的本地主机 Nginx 服务器配置。地址是/etc/nginx/sites-enabled/development/localhost

server {
    listen 80 default_server;
    server_name localhost;
    root /var/www/html;
    index index.nginx-debian.html;

    location / {
      internal;
    }

    error_page 404 /404.html;
    location /404.html {
      root /var/www/html/errors;
      internal;
    }

}

如果我http://locahost在 URL 栏中调用,则会显示 404 页面错误。但应该显示index.nginx-debian.html。但如果我http://localhost使用有效的子域调用,它就可以正常工作。就像那样http://users.localhost,在中定义/etc/nginx/sites-enabled/development/users

如果仅调用,则显示 Nginx 默认页面http://localhost404.html如果子域不存在,如果我http://localhost使用定义的子域正确调用,则显示另一个任意页面。

答案1

我按如下方式解决。

/etc/nginx/sites-enabled/development/default

server {
  listen 80 default_server;
  server_name *.localhost *.<host-name>;
  root /var/www/html/errors/404;

  location / {
    index subdomain.html;
  }

}

/etc/nginx/sites-enabled/development/localhost

server {
    listen 80;
    server_name = localhost;
    root /var/www/html;
    index index.nginx-debian.html;

    # to URI errors caused by paths after domain
    error_page 404 /domain.html;
    location = /domain.html {
        root /var/www/html/errors/404;
        internal;
    }
}

我不知道这个解决方案是否最好,所以如果有人有更好的解决方案,请在此处发布。谢谢。

相关内容