Nginx: Menulis ulang dari domain dasar ke sub direktori

5

Saya memiliki blog yang dihosting di http://site.com/blog .

Bagaimana cara saya menginstruksikan nginx untuk menulis ulang permintaan dari site.comke site.com/blog?

Ini seharusnya tidak permanen.

Quintin Par
sumber
Menganggap semua URL dan mempertahankan jalur relatif, Anda harus bisa menambahkan rewrite ^/(.*)$ /blog/$1 redirectke bagian atas blok server Anda.
cyberx86
@ cyberx86 Infinite redirect loop, itu.
Shane Madden
Sekarang itu hanya kecerobohan saya - saya harus tahu lebih baik. Mengganti, 'redirect' dengan 'last' tidak menghasilkan loop tak terbatas, tetapi masih tidak cukup ideal (itu membuat URL, tetapi melayani file yang tepat).
cyberx86
solusi yang dibagikan di tautan ini berfungsi untuk saya: < serverfault.com/a/677337/386872 >
Ozay Duman

Jawaban:

7
location = / {
    rewrite ^ http://site.com/blog/ redirect;
}

Ini hanya akan melakukan permintaan khusus untuk root. Jika Anda perlu menangkap semuanya (dialihkan http://site.com/somearticle/something.htmlke http://site.com/blog/somearticle/something.html), maka Anda akan memerlukan sesuatu yang lebih terlibat:

location /blog/ {
    # Empty; this is just here to avoid redirecting for this location,
    # though you might already have some config in a block like this.
}
location / {
    rewrite ^/(.*)$ http://site.com/blog/$1 redirect;
}
Shane Madden
sumber
1

Ini tidak berhasil untuk saya. Inilah yang berhasil:

  1. Buka file konfigurasi NGINX untuk situs Anda. Di dalam blok server, tambahkan path ke direktori root Anda dan atur urutan prioritas untuk file:

    root /mnt/www/www.domainname.com;
    index  index.php index.html index.htm;
    
  2. Buat blok lokasi kosong sebelum semua blok lokasi Anda yang lain:

    location /latest {
    # Nothing in here; this is to avoid redirecting for this location
    }
    
  3. Komentari direktif direktori root di blok lokasi / {} Anda dan tambahkan arahan ulang sehingga terlihat seperti ini:

    location / {
    # root   /mnt/www/www.domainname.com;
    index  index.php index.html index.htm;
    rewrite ^/(.*)$ http://www.domainname.com/latest/$1 redirect;
    }
    
  4. Pastikan lokasi Anda ~ .php $ block menunjukkan akarnya

    root /mnt/www/www.domainname.com;
    

Ini memperbaikinya untuk saya.

NightKnight di Cloudinsidr.com
sumber
1

coba ini sebagai gantinya:

location = / {
      return 301 /blog/;
 }

Kuncinya di sini adalah simbol '=' .

Ozay Duman
sumber