如何将根目录重定向到子目录,同时保留地址栏中的 URL

如何将根目录重定向到子目录,同时保留地址栏中的 URL

我有一个 nginx 设置,其文件夹结构如下:

- www
  |- splash
  |- blog

www是根文件夹。

我想重定向访问http://example.comsplash文件夹的用户。

但我不希望地址栏中的 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;
}

Nginx 文档

最后停止处理当前的 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;
        }


}

相关内容