让 Nginx 始终提供索引服务

让 Nginx 始终提供索引服务

如何让 nginx 始终提供 index.html 服务,无论 URL 如何?

例如,我希望 URLhttps://www.example.me/723738始终提供https://www.example.me/index.html

我不想使用重定向,因为用户仍然必须拥有他们在地址栏中输入的原始 URL。

我更改了 Nginx 配置以将 404 重定向到 index.html,但我不认为这是一个好方法,因为它将返回 404 响应。

将来我可能想让 index.html 显示用户访问的原始 URL,有办法吗?

谢谢

答案1

常见模式使用try_files默认 URI。下面是一个简单示例:

server {
    root /path/to/root;
    location / {
        try_files $uri $uri/ /index.html;
    }
}

这个文件了解更多信息。

答案2

问题 1 的答案:

您要找的功能称为 URL 重写。这允许您创建掩码(或“假”URL),以显示位于不同 URL 上的资源。

在 Nginx 中,这是通过rewrite <regexp-pattern> <target-url>配置文件中的命令实现的。以下是域 www.example.com 的 Nginx 配置:

server {
    listen 80;
    server_name www.example.com;

    root /var/www/example.com;
    index index.html;

    rewrite ^.*$ /index.html;
}

<regexp-pattern>(正则表达式) 部分与您在浏览器中输入的 url 进行比较 - 如果匹配成功,则<target-url>显示资源。

问题2的答案:

当前 URL 无法仅使用纯 HTML 文档显示。您需要使用服务器端脚本语言 - 例如 PHP。这将允许您向用户显示动态内容。关于 PHP 与 Nginx 的指南无穷无尽(https://askubuntu.com/a/134676) 以及如何从 PHP 显示当前 URL 的主题 (https://stackoverflow.com/a/6768831)。

答案3

这是您正在寻找的代码

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /var/www/;
index index.html;

location = /favicon.ico { access_log off; log_not_found off; }

error_page 404 =200 /;
}

服务器名称 _;他从任何 IP、域名进行监听。

相关内容