web-dev-qa-db-fra.com

Nginx racines multiples

J'aimerais détourner les demandes vers un sous-répertoire particulier, vers un autre emplacement racine. Comment? Mon bloc existant est:

server {
    listen       80;
    server_name  www.domain.com;

    location / {
        root   /home/me/Documents/site1;
        index  index.html;
    }

    location /petproject {
        root   /home/me/pet-Project/website;
        index  index.html;
        rewrite ^/petproject(.*)$ /$1;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    } }

Autrement dit, http://www.domain.com devrait servir /home/me/Documents/site1/index.html alors que http://www.domain.com/petproject devrait servir /home/me/pet-Project/website/index.html - il semble que nginx réexécute toutes les règles après le remplacement, et http://www.domain.com/petproject sert juste /home/me/Documents/site1/index.html.

La configuration a le problème habituel qui se produit généralement avec nginx. Autrement dit, en utilisant la directive root à l'intérieur du bloc location.

Essayez d'utiliser cette configuration au lieu de vos blocs location actuels:

root /home/me/Documents/site1;
index index.html;

location /petproject {
    alias /home/me/pet-Project/website;
}

Cela signifie que le répertoire par défaut de votre site Web est /home/me/Documents/site1, et pour /petproject URI, le contenu est diffusé à partir de /home/me/pet-Project/website répertoire.

27
Tero Kilkanen

Vous avez besoin de l'indicateur break ajouté à la règle de réécriture, de sorte que le traitement s'arrête, et comme c'est à l'intérieur d'un bloc d'emplacement, le traitement se poursuivra à l'intérieur de ce bloc:

rewrite ^/petproject/?(.*)$ /$1 break;

Notez que j'ai également ajouté /? au motif correspondant pour ne pas vous retrouver avec des doubles barres obliques au début de l'url.

4
wurtel