Nginx:如何从一个文件为不同的 URL 提供不同的设置?

Nginx:如何从一个文件为不同的 URL 提供不同的设置?

我有数千个名为 的文本文件ABC。我想从不同的 URL 访问这些文件: - 如果是ABCABC.txt我想添加default_type text/plain并提供该文件 - 如果是ABC.html我想添加default_type text/html并提供该文件(这样我就有了同一个文件的两个不同版本)。

在 nginx 中可以做到这一点吗?一个 URL 只能与一个location指令匹配,这让我很难找到一种“干净”的方法。

答案1

您应该尝试为每个文件扩展名创建一个单独的位置并使用内部重定向。它将类似于以下内容:

location /ABC.txt {
  add_header Content-Type text/plain;
  rewrite /ABC last;
}
location /ABC.html {
  add_header Content-Type text/html;
  rewrite /ABC last;
}
location /ABC {
  alias /var/www/ABC.txt
}

我不保证它会起作用,因为我还没有在真正的 nginx 上测试过它。

答案2

nginx 根据 URI 处理建议的 mimetype。我尝试了以下组合,并且有效:

    root /usr/share/nginx/www;

    default_type text/plain;

    location = /abc.txt {
      alias /usr/share/nginx/www/abc;
    }

    location /abc.html {
      alias /usr/share/nginx/www/abc;
    }

相关内容