让Nginx始终提供索引


3

无论网址如何,如何使nginx始终提供index.html?

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

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

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

将来,我可能希望让index.html显示用户访问的原始URL,有没有办法做到这一点?

谢谢

Answers:


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>(Regular EXPression)部分与您在浏览器中键入的url进行比较-如果匹配成功,<target-url>则显示资源at 。

对问题2的回答:

当前URL不能仅使用纯HTML文档显示。您将需要使用服务器端脚本语言-例如PHP。这将使您可以向用户显示动态内容。有关于PHP和Nginx的导游取之不尽(https://askubuntu.com/a/134676)和关于如何显示从PHP当前的URL(话题https://stackoverflow.com/a/6768831)。


6

通用模式try_files与默认URI一起使用。举一个简单的例子:

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

有关更多信息,请参见此文档


这显然更简单(另一方面,它不会掩盖目录中的其他现有文件)。
Marek Rost

2
非常正确,但是通常需要index.html插入资源文件,这就是为什么我首先介绍通用解决方案的原因。
理查德·史密斯

如果我希望将现有文件也重写/重定向到/index.html怎么办?
钱陈

1
@ElgsQianChen使用try_files /index.html =404;rewrite ^ /index.html break;。但是,如果没有其他更改,它将破坏对资源文件(JS。CSS,IMG)的访问。
理查德·史密斯

实际上,这是一个更好的解决OP问题的方法,只是为了使资产以正确的MIME类型正确加载。
gumol

0

这是您要查找的代码

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 /;
}

使用server_name _; 他从任何IP,域监听。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.