Thực hành tốt nhất: tách riêng server
w / mã hóa cứngserver_name
Thực hành tốt nhất với nginx là sử dụng riêng server
cho 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 server
vẫ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- www
to www
w / regex trong một đĩa đơn dành riêng server
cho tất cả các trang web:
server {
server_name ~^(?!www\.)(?<domain>.+)$;
return 301 $scheme://www.$domain$request_uri;
}
www
đến non- www
w / regex trong một đĩa đơn dành riêng server
cho tất cả các trang web:
server {
server_name ~^www\.(?<domain>.+)$;
return 301 $scheme://$domain$request_uri;
}
www
để không www
w / 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.com
và 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 pcretest
trên hệ thống của mình, đây chính là pcre
thư 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 if
trong 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 server
có 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 Settings
và đảm bảo rằng không cówww
URL Đị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 đó.