如何在保持地址栏中的URL的同时将根目录redirect到子目录

我有一个像这样的文件夹结构的nginx设置:

- www |- splash |- blog 

www是根文件夹。

我想将访问http://example.com用户redirectsplash文件夹。

但我不希望地址栏中的url更改为http://example.com/splash

地址栏中的url仍应为http://example.com

此规则只适用于用户访问根文件夹。

同时访问blog文件夹将像往常一样通过: http://example.com/bloghttp://example.com/blog

我如何做到这一点? 到目前为止,我的conf是如下:(他们不工作btw,URL被改变)

 server { listen 80; server_name www.example.com; root /www; location = / { rewrite ^/(.*)$ splash/$1 permanent; } } 

就这样 …

 server { listen 80; server_name www.mysite.com; root /www; location = / { root /www/splash; } location / { root /www; } } 

每个上下文可以有自己的根。

既然你有一个location上下文,只是改变根。

例如。

 location = / { root /www/splash; } 

文档可以在这里find 。 文档中给出的例子是:

 location /i/ { root /spool/w3; } 

对“/i/top.gif”的请求将返回文件“/spool/w3/i/top.gif”。

所以基本上,几乎是一个副本,除了你有一个完全匹配的位置。


如果有一个名为/ splash / blog的文件,您希望该url转到/ splash / blog或/ blog?

优先考虑文件的另一种方法是使用try_files 。 例如:

 location / { try_files /splash/$uri $uri =404; } 

在这种情况下,如果在/ splash中有一个匹配的文件,那么会显示这个文件,否则显示$ uri,或者在最后一个情况下显示一个404错误。

如果我的情况正确的话,这个为我工作:

 location ~/splash.* { return 200 "The request was $uri"; } location / { rewrite ^/$ /splash/ last; root /usr/share/nginx/html; index index.html index.htm; } 

来自Nginx的文档

上次停止处理当前的ngx_http_rewrite_module指令集,并开始search与更改的URI匹配的新位置;

我不想创build目录/ splash /所以我只是告诉Nginx使用硬编码文本进行响应。 您可以将其replace为所需的指令。