Wiele korzeni Nginx

13

Chciałbym przekierować żądania do określonego podkatalogu, do innej lokalizacji głównej. W jaki sposób? Mój istniejący blok to:

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;
    } }

Oznacza to, że http://www.domain.com powinien służyć /home/me/Documents/site1/index.html, podczas gdy http://www.domain.com/petproject powinien służyć / home / me / pet-Project / website /index.html - wygląda na to, że nginx ponownie uruchamia wszystkie reguły po zamianie, a http://www.domain.com/petproject służy tylko /home/me/Documents/site1/index.html.

Michael przywraca Monikę Cellio
źródło

Odpowiedzi:

28

Konfiguracja ma zwykły problem, który zwykle występuje w przypadku nginx. To znaczy, używając rootdyrektywy wewnątrz locationbloku.

Spróbuj użyć tej konfiguracji zamiast bieżących locationbloków:

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

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

Oznacza to, że domyślnym katalogiem dla Twojej witryny jest /home/me/Documents/site1, a dla /petprojectidentyfikatora URI zawartość jest udostępniana z /home/me/pet-Project/websitekatalogu.

Tero Kilkanen
źródło
4

Potrzebujesz breakflagi dodanej do reguły przepisywania, aby przetwarzanie zostało zatrzymane, a ponieważ jest to wewnątrz bloku lokalizacji, przetwarzanie będzie kontynuowane wewnątrz tego bloku:

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

Uwaga: Dodałem również /?do pasującego wzorca, aby nie skończyć podwójnymi ukośnikami na początku adresu URL.

wurtel
źródło
Przepisanie nie jest tu wcale potrzebne, gdy aliasużywana jest dyrektywa, tak jak powinna być tutaj.
Tero Kilkanen