拥有如下服务器设置。我想限制任何人访问http://myapp.com/blog/index.html它将路由到 /public/blog/index.html。这可能吗?还是我真的应该将博客文件夹存储在公共文件夹之外?(我不想要)
server {
listen 80;
server_name
myapp.*
root /srv/myapp/current/public;
}
server {
listen 80;
server_name
blog.myapp.*
root /srv/myapp/current/public/blog;
}
答案1
这确实是可能的。请尝试以下两个选项之一...
server {
listen 80;
server_name
myapp.*
root /srv/myapp/current/public;
location /blog {
# option 1
return 444;
# option 2
# rewrite /blog/(.*) $scheme://blog.myapp.tld/$1 permanent;
}
}
server {
listen 80;
server_name
blog.myapp.*
root /srv/myapp/current/public/blog;
}
对这两个选项的一些解释...
return 444
是 Nginx 特定的状态代码,不向浏览器返回任何内容。参考:http://en.wikipedia.org/wiki/List_of_HTTP_status_codes。如果您希望发送其他状态代码,例如 403,则删除 444 并输入您喜欢的代码;
rewrite /blog/(.*) $scheme://blog.myapp.tld/$1 permanent;
将子目录转换为子域。这个问题已经回答过了。参考:Nginx 重写规则(子目录到子域)
return
您可以在以下网址了解有关声明的更多信息http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#returnrewrite
以及关于http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite。
我希望这能有所帮助。