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.


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

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.


1

coba ini sebagai gantinya:

location = / {
      return 301 /blog/;
 }

Kuncinya di sini adalah simbol '=' .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.