En İyi Uygulama: server
sabit kodlu ayrıserver_name
Nginx ile en iyi uygulama, server
bunun 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 server
hala 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 www
için www
w / adanmış tek regex server
tüm siteler için:
server {
server_name ~^(?!www\.)(?<domain>.+)$;
return 301 $scheme://www.$domain$request_uri;
}
www
olmayan için www
adanmış tek içinde w / regex server
tü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.com
ve 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 pcretest
sisteminizde beklendiği gibi çalıştığını test edebilirsiniz , bu da pcre
nginx'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 .
if
Mevcut 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ı server
tanı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 www
için www
:
if ($host ~ ^(?!www\.)(?<domain>.+)$) {
return 301 $scheme://www.$domain$request_uri;
}
www
olmayan 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 server
kullanabileceğ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 Settings
yok 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.