Nginx - 如何将目录重定向到其路径包含目录的文件?

时间:2015-03-25 16:40:23

标签: redirect nginx url-rewriting uwsgi virtual-directory

我是Nginx的新手,我试图将目录重定向到文件,这基本上就是我尝试做的事情:

When entering this link:
http://localhost:8889/dir

go to this link instead:

http://localhost:8889/dir/path/to/the/file/index.html

正如您所看到的,该目录是我尝试重定向到的文件路径的一部分。此外,配置文件中已有一个位置块,用于将该目录重定向到正确的位置:

location /dir {
    root      /opt/dir;
}

我的第一次尝试是使用重写指令,就像我在博客中看到的那样(https://jeffsebring.com/2012/nginx-301-redirects/):

if ( $request_filename ~ dir ) {
    rewrite ^ http://localhost:8889/dir/path/to/the/file/index.html permanent;
}

但该页面显示它有一个重定向循环,我认为这是与旧位置块的冲突。

然后我尝试添加另一个位置块,就像我在这里看到的那样(nginx rewrite virtual directory to file):

location /dir {
    rewrite ^/dir$ /dir/path/to/the/file/index.html; 
}

但是在重新加载配置文件之后,Nginx告诉我已经存在一个存在相同目录的位置块。

所以我的问题是,我有什么方法可以做到这一点?或者甚至不可能?

谢谢!

1 个答案:

答案 0 :(得分:1)

找到了解决方案。

我使用“return”返回完整的硬编码网址,而不是重写当前的网址:

location ~* /dir$ {
    return http://localhost:8889/dir/path/to/the/file/index.html; 
}

此重写解决方案也适用:

location ~* /dir$ {
    rewrite ^/dir$ /dir/path/to/the/file/index.html;
}

我遇到的问题实际上是由缓存引起的。我实际上正在从缓存重新加载页面,所以在更改nginx配置文件后我看不到结果,我通过检查Chrome中的开发工具中的“禁用缓存”选项解决了这个问题。