如何让 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、域名进行监听。