我有一个 nginx 设置,其文件夹结构如下:
- www
|- splash
|- blog
www
是根文件夹。
我想重定向访问http://example.com
该splash
文件夹的用户。
但我不希望地址栏中的 URL 变为http://example.com/splash
。
地址栏中的 URL 应该仍是http://example.com
。
此规则仅应在用户访问根文件夹时适用。
blog
同时,可以通过以下方式照常访问该文件夹: http://example.com/blog
。
我该如何实现这一点?到目前为止,我的配置如下:(顺便说一下,它们不起作用,URL 已更改)
server {
listen 80;
server_name www.example.com;
root /www;
location = / {
rewrite ^/(.*)$ splash/$1 permanent;
}
}
答案1
每个上下文都可以有自己的根。
既然有上下文location
,就换个根吧。
例如。
location = / {
root /www/splash;
}
有文档可供查阅这里文档中给出的例子是:
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 错误。
答案2
如果我理解你的情况的话,这个对我有用:
location ~/splash.* {
return 200 "The request was $uri";
}
location / {
rewrite ^/$ /splash/ last;
root /usr/share/nginx/html;
index index.html index.htm;
}
最后停止处理当前的 ngx_http_rewrite_module 指令集并开始搜索与改变的 URI 匹配的新位置;
我不想创建目录 /splash/,所以我只告诉 Nginx 用硬编码文本进行响应。您可以用必需的指令替换它。
答案3
就这样 ...
server {
listen 80;
server_name www.mysite.com;
root /www;
location = / {
root /www/splash;
}
location / {
root /www;
}
}