Praktik Terbaik: pisahkan server
dg hardcodeserver_name
Praktik terbaik dengan nginx adalah menggunakan terpisah server
untuk pengalihan seperti ini (tidak dibagikan dengan server
konfigurasi 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 server
masih 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- www
ke www
/ regex dalam satu khusus server
untuk semua situs:
server {
server_name ~^(?!www\.)(?<domain>.+)$;
return 301 $scheme://www.$domain$request_uri;
}
www
ke non- www
w / regex dalam satu khusus server
untuk semua situs:
server {
server_name ~^www\.(?<domain>.+)$;
return 301 $scheme://$domain$request_uri;
}
www
untuk non-www
/ regex di khusus server
untuk 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.com
dan 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 pcretest
pada sistem Anda, yang merupakan pcre
pustaka 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 if
dalam 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 server
definisi yang berbeda , dan sebagai gantinya dapat menempatkan cuplikan hanya ke dalam server yang dibutuhkan, membuatnya lebih mudah untuk debug dan memelihara situs Anda.
tanpa www
ke www
:
if ($host ~ ^(?!www\.)(?<domain>.+)$) {
return 301 $scheme://www.$domain$request_uri;
}
www
untuk 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 server
dapat 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 Settings
dan pastikan tidak adawww
di 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.