Nginx banyak akar

13

Saya ingin mengalihkan permintaan ke sub-direktori tertentu, ke lokasi root lain. Bagaimana? Blok saya yang ada adalah:

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

Yaitu, http://www.domain.com harus melayani /home/me/Documents/site1/index.html sedangkan http://www.domain.com/petproject harus melayani / home / me / pet-Project / website /index.html - tampaknya nginx menjalankan kembali semua aturan setelah penggantian, dan http://www.domain.com/petproject hanya melayani /home/me/Documents/site1/index.html.

Michael mengembalikan Monica Cellio
sumber

Jawaban:

27

Konfigurasi memiliki masalah yang biasa terjadi pada nginx. Yaitu, menggunakan rootdirektif di dalam locationblok.

Coba gunakan konfigurasi ini alih-alih locationblok Anda saat ini :

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

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

Ini berarti direktori default untuk situs web Anda adalah /home/me/Documents/site1, dan untuk /petprojectURI, konten disajikan dari /home/me/pet-Project/websitedirektori.

Tero Kilkanen
sumber
4

Anda memerlukan breakbendera yang ditambahkan ke aturan penulisan ulang, sehingga pemrosesan berhenti, dan karena ini ada di dalam blok lokasi, pengolahan akan berlanjut di dalam blok itu:

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

Catatan saya juga menambahkan /?pola yang cocok sehingga Anda tidak berakhir dengan garis miring ganda di awal url.

Wurtel
sumber
Menulis ulang tidak diperlukan di sini sama sekali ketika aliasarahan digunakan seperti itu harus digunakan di sini.
Tero Kilkanen