En İyi Uygulama: serversabit kodlu ayrıserver_name
Nginx ile en iyi uygulama, serverbunun gibi bir yönlendirme için ayrı bir yöntem kullanmaktır (server ana yapılandırmanızla şey kullanmak, her şeyi sabit kodlamak ve normal ifadeler kullanmamaktır.
HTTPS kullanıyorsanız alan adlarını sabit kodlamak da gerekebilir, çünkü hangi sertifikaları vereceğinizi önceden bilmeniz gerekir.
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
}
İçinde Normal İfadeleri Kullanma server_name
Çok sayıda siteniz varsa ve en yüksek performansı umursamıyorsanız, ancak her birinin www.önek konusunda aynı politikaya sahip olmasını istiyorsanız, düzenli ifadeler kullanabilirsiniz. Ayrı bir kullanım için en iyi uygulama serverhala geçerli olacaktır.
Https kullanırsanız bu çözümün zorlaşacağını unutmayın, çünkü düzgün çalışmasını istiyorsanız, tüm alan adlarınızı kapsayan tek bir sertifikaya sahip olmanız gerekir.
olmayan wwwiçin wwww / adanmış tek regex servertüm siteler için:
server {
server_name ~^(?!www\.)(?<domain>.+)$;
return 301 $scheme://www.$domain$request_uri;
}
wwwolmayan için wwwadanmış tek içinde w / regex servertüm siteler için:
server {
server_name ~^www\.(?<domain>.+)$;
return 301 $scheme://$domain$request_uri;
}
www olmayanwww özel bir ağırlık / düzenli ifadeserver sadece bazı siteler için:
Etki yalnızca birkaç, o zaman sadece maç için böyle bir şey kullanabilirsiniz kapsayacak şekilde regex kısıtlamak gerekebilir www.example.org, www.example.comve www.subdomain.example.net:
server {
server_name ~^www\.(?<domain>(?:example\.org|example\.com|subdomain\.example\.net))$;
return 301 $scheme://$domain$request_uri;
}
Nginx ile Düzenli İfadeleri Test Etme
Normal ifadenizin pcretestsisteminizde beklendiği gibi çalıştığını test edebilirsiniz , bu da pcrenginx'inizin normal ifadeler için kullanacağı kütüphane ile aynıdır :
% 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>
"Host" başlığında bir son nokta olduğunda nginx sunucu adı normal ifadesine göre , nginx zaten ilgileniyor olduğundan, sondaki noktalar veya durum hakkında endişelenmenize gerek olmadığını unutmayın .
ifMevcut server/ HTTPS içinde serpin :
Bu nihai çözüm genellikle en iyi uygulama olarak kabul edilmez, ancak yine de çalışır ve işi yapar.
Aslında, HTTPS kullanıyorsanız, bu son çözümün bakımı daha kolay olabilir, çünkü farklı servertanımlar arasında bir dizi ssl direktifini kopyalayıp yapıştırmak zorunda kalmayacaksınız ve bunun yerine parçacıkları sadece gerekli sunuculara erişerek sitelerinizde hata ayıklamayı ve bakımını kolaylaştırır.
olmayan wwwiçin www:
if ($host ~ ^(?!www\.)(?<domain>.+)$) {
return 301 $scheme://www.$domain$request_uri;
}
wwwolmayan www:
if ($host ~ ^www\.(?<domain>.+)$) {
return 301 $scheme://$domain$request_uri;
}
tek bir tercih edilen alanın kodlanması
Biraz daha fazla performans ve tek bir alanın serverkullanabileceği birden çok alan arasındaki tutarlılık istiyorsanız, yine de tek bir tercih edilen alanı açıkça kodlamak mantıklı olabilir:
if ($host != "example.com") {
return 301 $scheme://example.com$request_uri;
}
Referanslar:
Dashboard > Settings > General Settingsyok olduğundan emin olun ve yorum yapmak zorunda olduğumu hissediyorumwww. Nginx'inizi nasıl yapılandırırsanız yapın, bu URL'lerde bir www varsa, içinde www olana yönlendirilirsiniz.