Praktik Terbaik: pisahkan serverdg hardcodeserver_name
Praktik terbaik dengan nginx adalah menggunakan terpisah serveruntuk pengalihan seperti ini (tidak dibagikan dengan serverkonfigurasi utama Anda), untuk meng-hardcode semuanya, dan tidak menggunakan ekspresi reguler sama sekali.
Mungkin juga diperlukan untuk melakukan hardcode pada domain jika Anda menggunakan HTTPS, karena Anda harus tahu di muka sertifikat mana yang akan Anda berikan.
server {
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
server {
server_name www.example.org;
return 301 $scheme://example.org$request_uri;
}
server {
server_name example.com example.org;
# real configuration goes here
}
Menggunakan Ekspresi Reguler di dalam server_name
Jika Anda memiliki sejumlah situs, dan tidak peduli dengan kinerja terbaik, tetapi ingin setiap situs memiliki kebijakan yang sama terkait dengan www. awalan, maka Anda dapat menggunakan ekspresi reguler. Praktik terbaik untuk menggunakan yang terpisah servermasih akan berlaku.
Perhatikan bahwa solusi ini menjadi rumit jika Anda menggunakan https, karena Anda harus memiliki satu sertifikat untuk mencakup semua nama domain Anda jika Anda ingin ini berfungsi dengan baik.
non- wwwke www/ regex dalam satu khusus serveruntuk semua situs:
server {
server_name ~^(?!www\.)(?<domain>.+)$;
return 301 $scheme://www.$domain$request_uri;
}
wwwke non- wwww / regex dalam satu khusus serveruntuk semua situs:
server {
server_name ~^www\.(?<domain>.+)$;
return 301 $scheme://$domain$request_uri;
}
www untuk non-www / regex di khusus serveruntuk beberapa situs saja:
Mungkin perlu untuk membatasi regex untuk hanya mencakup beberapa domain, maka Anda dapat menggunakan sesuatu seperti ini hanya untuk mencocokkan www.example.org, www.example.comdan www.subdomain.example.net:
server {
server_name ~^www\.(?<domain>(?:example\.org|example\.com|subdomain\.example\.net))$;
return 301 $scheme://$domain$request_uri;
}
Menguji Ekspresi Reguler dengan nginx
Anda dapat menguji apakah regex berfungsi seperti yang diharapkan pcretestpada sistem Anda, yang merupakan pcrepustaka yang sama persis dengan yang akan digunakan nginx Anda untuk ekspresi reguler:
% pcretest
PCRE version 8.35 2014-04-04
re> #^www\.(?<domain>(?:example\.org|example\.com|subdomain\.example\.net))$#
data> test
No match
data> www.example.org
0: www.example.org
1: example.org
data> www.test.example.org
No match
data> www.example.com
0: www.example.com
1: example.com
data> www.subdomain.example.net
0: www.subdomain.example.net
1: subdomain.example.net
data> subdomain.example.net
No match
data> www.subdomain.example.net.
No match
data>
Perhatikan bahwa Anda tidak perlu khawatir tentang trailing dots atau case, karena nginx sudah mengatasinya, seperti nginx nama server regex ketika header "Host" memiliki trailing dot .
Taburkan ifdalam yang ada server/ HTTPS:
Solusi akhir ini umumnya tidak dianggap sebagai praktik terbaik, namun tetap berfungsi dan berfungsi.
Bahkan, jika Anda menggunakan HTTPS, maka solusi akhir ini mungkin lebih mudah dikelola, karena Anda tidak perlu menyalin-menempelkan sejumlah arahan ssl di antara serverdefinisi yang berbeda , dan sebagai gantinya dapat menempatkan cuplikan hanya ke dalam server yang dibutuhkan, membuatnya lebih mudah untuk debug dan memelihara situs Anda.
tanpa wwwke www:
if ($host ~ ^(?!www\.)(?<domain>.+)$) {
return 301 $scheme://www.$domain$request_uri;
}
wwwuntuk non- www:
if ($host ~ ^www\.(?<domain>.+)$) {
return 301 $scheme://$domain$request_uri;
}
hardcoding domain pilihan tunggal
Jika Anda ingin sedikit lebih banyak kinerja, dan juga konsistensi antara beberapa domain yang serverdapat digunakan tunggal , mungkin masih masuk akal untuk secara eksplisit melakukan hardcode satu domain yang disukai:
if ($host != "example.com") {
return 301 $scheme://example.com$request_uri;
}
Referensi:
Dashboard > Settings > General Settingsdan pastikan tidak adawwwdi Alamat WordPress / URL Alamat Situs. Tidak masalah bagaimana Anda mengkonfigurasi nginx Anda, jika Anda memiliki www di URL ini, itu akan diarahkan ke yang memiliki www di dalamnya.