แนวปฏิบัติที่ดีที่สุด: แยกserver
w / ฮาร์ดโค้ดserver_name
วิธีปฏิบัติที่ดีที่สุดกับ nginx คือการใช้ตัวแยกserver
สำหรับการเปลี่ยนเส้นทางเช่นนี้ (ไม่แชร์กับการserver
กำหนดค่าหลักของคุณ) เพื่อ hardcode ทุกอย่างและไม่ใช้นิพจน์ทั่วไปเลย
นอกจากนี้ยังอาจจำเป็นต้อง hardcode โดเมนหากคุณใช้ HTTPS เนื่องจากคุณต้องรู้ล่วงหน้าว่าจะให้ใบรับรองใด
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
}
ใช้นิพจน์ทั่วไปภายใน server_name
หากคุณมีเว็บไซต์จำนวนมากและไม่สนใจประสิทธิภาพสูงสุด แต่ต้องการให้ทุก ๆ เว็บไซต์มีนโยบายเดียวกันเกี่ยวกับwww.
คำนำหน้าคุณสามารถใช้นิพจน์ทั่วไปได้ แนวปฏิบัติที่ดีที่สุดของการใช้งานแยกต่างหากserver
จะยังคงอยู่
โปรดทราบว่าวิธีนี้จะยุ่งยากหากคุณใช้ https เนื่องจากคุณต้องมีใบรับรองหนึ่งฉบับเพื่อให้ครอบคลุมชื่อโดเมนทั้งหมดของคุณหากคุณต้องการให้สิ่งนี้ทำงานได้อย่างถูกต้อง
ไม่ใช่www
เพื่อwww
w / regex ในซิงเกิ้ลเฉพาะserver
สำหรับไซต์ทั้งหมด:
server {
server_name ~^(?!www\.)(?<domain>.+)$;
return 301 $scheme://www.$domain$request_uri;
}
www
เป็น non- www
w / regex ในซิงเกิ้ลเฉพาะserver
สำหรับทุกไซต์:
server {
server_name ~^www\.(?<domain>.+)$;
return 301 $scheme://$domain$request_uri;
}
www
เพื่อ non- www
w / regex ในแบบเฉพาะserver
ในบางเว็บไซต์เท่านั้น:
มันอาจจะเป็นสิ่งจำเป็นที่จะ จำกัด การ regex เพื่อให้ครอบคลุมเพียงคู่ของโดเมนแล้วคุณสามารถใช้บางอย่างเช่นนี้เพียงตรงwww.example.org
, www.example.com
และwww.subdomain.example.net
:
server {
server_name ~^www\.(?<domain>(?:example\.org|example\.com|subdomain\.example\.net))$;
return 301 $scheme://$domain$request_uri;
}
ทดสอบนิพจน์ปกติด้วย nginx
คุณสามารถทดสอบว่า regex ทำงานได้ตามที่คาดหวังไว้pcretest
ในระบบของคุณซึ่งเป็นpcre
ไลบรารีเดียวกับที่ nginx ของคุณจะใช้สำหรับนิพจน์ทั่วไป:
% 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>
โปรดทราบว่าคุณไม่ต้องกังวลเกี่ยวกับการลากจุดหรือกรณีเป็น Nginx แล้วจะดูแลมันเป็นต่อNginx ชื่อเซิร์ฟเวอร์ regex เมื่อ "เจ้าภาพ" ส่วนหัวมีจุดต่อท้าย
โรยif
ภายในserver
/ HTTPS ที่มีอยู่:
วิธีแก้ปัญหาสุดท้ายนี้โดยทั่วไปจะไม่ถือว่าเป็นแนวปฏิบัติที่ดีที่สุด แต่ก็ยังใช้งานได้และทำงานได้ดี
อันที่จริง, ถ้าคุณใช้ HTTPS, วิธีแก้ปัญหาสุดท้ายนี้อาจจบลงได้ง่ายกว่า, เนื่องจากคุณไม่ต้องคัดลอกคำสั่ง ssl ทั้งกลุ่มระหว่างserver
คำจำกัดความที่แตกต่างกัน, และสามารถวางตัวอย่างใน เซิร์ฟเวอร์ที่จำเป็นทำให้ง่ายต่อการตรวจแก้จุดบกพร่องและบำรุงรักษาเว็บไซต์ของคุณ
ไม่www
ถึงwww
:
if ($host ~ ^(?!www\.)(?<domain>.+)$) {
return 301 $scheme://www.$domain$request_uri;
}
www
เป็นไม่ใช่www
:
if ($host ~ ^www\.(?<domain>.+)$) {
return 301 $scheme://$domain$request_uri;
}
ฮาร์ดโค้ดโดเมนเดียวที่ต้องการ
หากคุณต้องการประสิทธิภาพเพิ่มขึ้นอีกเล็กน้อยรวมถึงความสอดคล้องกันระหว่างหลาย ๆ โดเมนที่server
อาจใช้งานเพียงอย่างเดียวก็ยังอาจทำให้ฮาร์ดโค้ดโดเมนที่ต้องการเดียวชัดเจน:
if ($host != "example.com") {
return 301 $scheme://example.com$request_uri;
}
อ้างอิง:
Dashboard > Settings > General Settings
และตรวจสอบให้แน่ใจว่าไม่มีwww
ใน URL ที่อยู่ / ที่อยู่ไซต์ WordPress ไม่ว่าคุณจะกำหนดค่า nginx อย่างไรถ้าคุณมี www ใน URL เหล่านี้มันจะถูกเปลี่ยนเส้นทางไปยังที่มี www อยู่