Thực hành tốt nhất: tách riêng serverw / mã hóa cứngserver_name
Thực hành tốt nhất với nginx là sử dụng riêng servercho một chuyển hướng như thế này (không được chia sẻ vớiserver cấu hình chính của bạn), để mã hóa mọi thứ và không sử dụng biểu thức thông thường nào cả.
Cũng có thể cần phải mã hóa tên miền nếu bạn đang sử dụng HTTPS, bởi vì bạn phải biết trả trước những chứng chỉ nào bạn sẽ cung cấp.
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
}
Sử dụng biểu thức chính quy trong server_name
Nếu bạn có một số trang web và không quan tâm đến hiệu suất cao nhất, nhưng muốn mỗi một trong số chúng có chính sách tương tự liên quan đến www.tiền tố, thì bạn có thể sử dụng các biểu thức thông thường. Thực hành tốt nhất của việc sử dụng riêng biệt servervẫn sẽ đứng.
Lưu ý rằng giải pháp này trở nên khó khăn nếu bạn sử dụng https, vì sau đó bạn phải có một chứng chỉ duy nhất để bao gồm tất cả các tên miền của bạn nếu bạn muốn nó hoạt động chính xác.
non- wwwto wwww / regex trong một đĩa đơn dành riêng servercho tất cả các trang web:
server {
server_name ~^(?!www\.)(?<domain>.+)$;
return 301 $scheme://www.$domain$request_uri;
}
wwwđến non- wwww / regex trong một đĩa đơn dành riêng servercho tất cả các trang web:
server {
server_name ~^www\.(?<domain>.+)$;
return 301 $scheme://$domain$request_uri;
}
wwwđể không wwww / regex trong một chuyên dụngserver cho một số trang web:
Nó có thể là cần thiết để hạn chế regex để chỉ bao gồm một vài lĩnh vực, sau đó bạn có thể sử dụng một cái gì đó như thế này để chỉ phù hợp www.example.org, www.example.comvà www.subdomain.example.net:
server {
server_name ~^www\.(?<domain>(?:example\.org|example\.com|subdomain\.example\.net))$;
return 301 $scheme://$domain$request_uri;
}
Kiểm tra biểu thức chính quy w / nginx
Bạn có thể kiểm tra regex hoạt động như mong đợi pcretesttrên hệ thống của mình, đây chính là pcrethư viện chính xác mà nginx của bạn sẽ sử dụng cho các biểu thức thông thường:
% 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>
Lưu ý rằng bạn không phải lo lắng về dấu chấm hoặc trường hợp, vì nginx đã xử lý nó, vì regex tên máy chủ của nginx khi tiêu đề "Máy chủ" có dấu chấm .
Rắc iftrong server/ HTTPS hiện có :
Giải pháp cuối cùng này thường không được coi là thực tiễn tốt nhất, tuy nhiên, nó vẫn hoạt động và thực hiện công việc.
Trên thực tế, nếu bạn đang sử dụng HTTPS, thì giải pháp cuối cùng này có thể sẽ dễ bảo trì hơn, vì bạn sẽ không phải sao chép-dán toàn bộ các lệnh ssl giữa các serverđịnh nghĩa khác nhau và thay vào đó chỉ có thể đặt đoạn trích vào các máy chủ cần thiết, giúp dễ dàng gỡ lỗi và duy trì trang web của bạn.
không wwwđến www:
if ($host ~ ^(?!www\.)(?<domain>.+)$) {
return 301 $scheme://www.$domain$request_uri;
}
wwwđể phi www:
if ($host ~ ^www\.(?<domain>.+)$) {
return 301 $scheme://$domain$request_uri;
}
mã hóa một miền ưa thích duy nhất
Nếu bạn muốn có hiệu suất cao hơn một chút, cũng như tính nhất quán giữa nhiều tên miền mà một tên miền servercó thể sử dụng, thì vẫn có thể có ý nghĩa để mã hóa rõ ràng một tên miền ưa thích duy nhất:
if ($host != "example.com") {
return 301 $scheme://example.com$request_uri;
}
Người giới thiệu:
Dashboard > Settings > General Settingsvà đảm bảo rằng không cówwwURL Địa chỉ / Địa chỉ trang web WordPress nào. Bất kể bạn định cấu hình nginx của mình như thế nào, nếu bạn có www trong các URL này, nó sẽ được chuyển hướng đến một URL có www trong đó.