2017-02-03 12 views
0

Я хочу следующее. http://some.site/person1/some/path должен получить доступ к /home/person1/some/pathhttp://some.site/person1 доступ /home/person1/index.html) и http://some.site/person2/some/path должен получить доступ к /home/person2/some/path (и получает доступ к http://some.site/person2/home/person2/index.html). Там будет много personX es. Важно использовать регулярное выражение, чтобы сказать nginx, где все можно найти.nginx: корень выбран по пути

Я попытался придумать набор правил расположения, root и переписать, которые будут работать. Самое близкое, что я пришел, было для моего sites-available/website.

server { 
     listen 80 default_server; 
     listen [::]:80 default_server; 
     server_name _; 
     root /some/default/root; 

     # Add index.php to the list if you are using PHP 
     index index.html index.htm index.nginx-debian.html; 

     location/{ 
       # First attempt to serve request as file, then 
       # as directory, then fall back to displaying a 404. 
       try_files $uri.html $uri $uri/ =404; 
     } 

     location /person1 { 
       root /home/person1; 
       rewrite ^/person1(.*)$ $1 break; 
     } 
} 

Это делает то, что я хочу со всеми путями для них вида http://some.site/person1 кроме. В этом случае nginx не имеет доступа к /home/person1/index.html, как я хочу. Вместо этого регулярное выражение возвращает пустую строку, которой nginx не нравится (я вижу жалобы в nginx/error.log).

ответ

0

, когда у вас есть общий начальный корневой директории в/дома, вы можете попробовать:

location ~* /person\d+ { 
    root /home; 
}