我有一个像这样的文件夹结构的nginx设置:
- www |- splash |- blog
www
是根文件夹。
我想将访问http://example.com
用户redirect到splash
文件夹。
但我不希望地址栏中的url更改为http://example.com/splash
。
地址栏中的url仍应为http://example.com
。
此规则只适用于用户访问根文件夹。
同时访问blog
文件夹将像往常一样通过: http://example.com/blog
: http://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为所需的指令。