Имея настройку сервера, как показано ниже. Я хочу запретить кому-либо доступ 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;
}
Это действительно возможно. Попробуйте один из двух вариантов, представленных ниже ...
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#return и о rewrite
заявление на http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite .
Надеюсь, это поможет.