WordPress Multisite: 2 cấu trúc tên miền phụ và thư mục con
WordPress Multisite là tính năng gom nhiều trang web vào một mạng và quản lý chúng bằng một bản cài đặt WordPress duy nhất. Trên WordPress chạy cấu hình Nginx + Apache, chúng tôi đã bật multisite từ màn hình Cài đặt mạng, thêm một trang web con và kiểm tra đường dẫn menu cùng các dòng cần thêm vào tệp cấu hình.
1️⃣ WordPress Multisite và Quản trị mạng
Với multisite, mọi trang web trong mạng dùng chung một bản cài đặt WordPress. Tệp lõi, plugin và giao diện cũng được dùng chung, nên trên máy chủ không có thư mục WordPress riêng cho từng trang web.
Phần mỗi trang web có riêng là các bảng cơ sở dữ liệu và thư mục tải lên tệp media, còn chỉ có bảng người dùng là dùng chung cho cả mạng. Trang web đầu tiên dùng [/wp-content/uploads/] có sẵn, từ trang web tiếp theo thì mỗi trang dùng thư mục mang số thứ tự trang web trong [/wp-content/uploads/sites/].
Người dùng quản lý toàn bộ mạng là quản trị viên cấp cao (Super Admin). Các màn hình Quản trị mạng chỉ xuất hiện sau khi tạo mạng và chỉ hiển thị với quản trị viên cấp cao.
Người dùng được tạo dưới dạng tài khoản của mạng, nhưng phải được cấp vai trò trên từng trang web mới truy cập được trang đó. Quyền của quản trị viên trang web cũng bị thu hẹp: chỉ quản trị viên cấp cao mới cài được giao diện, plugin hoặc sửa hồ sơ của người dùng khác.
Trong sơ đồ bên dưới, bạn có thể xem cách một bản cài đặt chia thành nhiều trang web qua mạng, cùng địa chỉ trang web theo từng kiểu địa chỉ.
2️⃣ Khác biệt giữa tên miền phụ và thư mục con: dạng địa chỉ và giới hạn khi chọn
Khi cài đặt mạng, bạn chọn kiểu địa chỉ trang web là tên miền phụ hoặc thư mục con. Tên miền phụ là địa chỉ dạng site1.example.com, còn thư mục con (folder con) là địa chỉ dạng example.com/site1.
| Hạng mục | Tên miền phụ | Thư mục con |
|---|---|---|
| Địa chỉ trang web | site1.example.com | example.com/site1 |
| Tên trong tài liệu chính thức | Dựa trên tên miền (domain-based) | Dựa trên đường dẫn (path-based) |
| Chuẩn bị phía máy chủ | Trỏ tên miền phụ về thư mục cài đặt WordPress trong DNS và trên máy chủ | Không cần cài đặt thêm nếu cấu trúc đường dẫn hoạt động |
| Khi người dùng tự tạo trang web | Cần tên miền phụ wildcard | Không có điều kiện thêm |
| Khi không thể chọn | Khi địa chỉ WordPress có đường dẫn, hoặc là localhost hay địa chỉ IP | Trang web có bài viết đã đăng hơn một tháng |
| Địa chỉ bài viết của trang web chính | Không thay đổi | Thêm /blog/ trước địa chỉ bài viết |
Kiểu thư mục con không cần cài đặt gì thêm trên máy chủ có cấu trúc đường dẫn hoạt động, nhưng không thể chọn trên trang web có bài viết đã đăng hơn một tháng. Giới hạn này nhằm tránh xung đột giữa địa chỉ bài viết cũ và địa chỉ trang web mới, nên những trang web như vậy sẽ được cài theo kiểu tên miền phụ.
Trong mạng kiểu thư mục con, địa chỉ bài viết của trang web chính được thêm [/blog/]. Cách này giúp không trùng với địa chỉ trang web con, và không thêm vào địa chỉ trang.
Muốn đổi kiểu đã chọn về sau cần qua nhiều bước. Theo tài liệu chính thức, chỉ đổi giá trị [SUBDOMAIN_INSTALL] và quy tắc viết lại thì địa chỉ các trang web hiện có không được chuyển theo, và còn phải cài đặt riêng DNS lẫn chứng chỉ.
3️⃣ Chuẩn bị trước khi cài đặt mạng: sao lưu, cấu trúc đường dẫn và điều kiện máy chủ
Cài đặt mạng là thao tác thay đổi tệp và cơ sở dữ liệu của trang web hiện có, nên tài liệu chính thức khuyên sao lưu trước nếu đó không phải trang web vừa cài mới.
Sao lưu cơ sở dữ liệu và tệp, kiểm tra cấu trúc đường dẫn có hoạt động, rồi tắt toàn bộ plugin đang bật. Bật lại plugin sau khi đã tạo mạng.
Nếu bạn định chuyển WordPress sang chạy từ thư mục riêng, hãy làm xong việc đó trước khi bật multisite. Nếu dùng địa chỉ www với kiểu tên miền phụ, hãy đặt [Địa chỉ WordPress (URL)] và [Địa chỉ trang web (URL)] giống nhau, và đổi tên miền xong trước khi cài đặt.
Nếu địa chỉ WordPress có số cổng khác :80 hoặc :443 thì không thể tạo mạng.
Máy chủ phải xử lý được quy tắc viết lại dành cho multisite, và Apache cần mod_rewrite.
Trong cấu hình Nginx + Apache, Nginx chuyển yêu cầu sang Apache và Apache đọc .htaccess. Sau khi thay .htaccess bằng quy tắc hiện trên màn hình Cài đặt mạng, địa chỉ trang web con đã mở được, và chúng tôi không thêm quy tắc nào phía Nginx.
Trên máy chủ chỉ dùng Nginx, WordPress không tạo quy tắc viết lại, nên bạn phải tự thêm cấu hình Nginx trong tài liệu chính thức vào tệp cấu hình máy chủ.
Ở môi trường không tự đổi được cấu hình máy chủ như hosting chia sẻ, các điều kiện như tên miền phụ wildcard cần trao đổi với nhà cung cấp hosting (theo tài liệu chính thức).
4️⃣ Các bước cài đặt mạng
Hằng số [WP_ALLOW_MULTISITE] thêm vào wp-config.php chỉ làm hiện menu [Công cụ] › [Cài đặt mạng], tự nó không bật multisite. Mạng chỉ được bật sau khi bạn cài đặt trên màn hình đó và thêm các dòng hiện ra vào wp-config.php và .htaccess.
Mở wp-config.php và thêm dòng định nghĩa [WP_ALLOW_MULTISITE] là true phía trên chú thích kết thúc chỉnh sửa. Chú thích kết thúc chỉnh sửa là dòng /* That’s all, stop editing! Happy publishing. */; lưu xong thì tải lại trình duyệt.
define( 'WP_ALLOW_MULTISITE', true );Sau khi tải lại, [Cài đặt mạng] được thêm vào dưới [Xóa dữ liệu cá nhân] trong menu [Công cụ], và bấm vào đó sẽ mở màn hình [Tạo một Mạng Lưới Các Trang Mạng WordPress].

WordPress cài trong thư mục con chỉ hiện dòng [Cài đặt thư mục con], không có ô để chọn kiểu địa chỉ. Nội dung dòng đó là [Do trang web chính của bạn cài đặt trong thư mục con, các trang web khác trong mạng WordPress của bạn phải sử dụng cấu trúc thư mục con.]
Kiểm tra [Tiêu Đề Mạng Lưới] và [Địa Chỉ Thư Điện Tử Quản Trị Mạng] rồi bấm [Cài đặt].
Theo tài liệu chính thức, ở bản cài đặt cho phép chọn kiểu địa chỉ, nếu chọn tên miền phụ sẽ hiện thông báo về DNS wildcard, và điều kiện này chỉ cần cho mạng mà người dùng tự tạo trang web.
Sau khi cài đặt, màn hình hiện các dòng wp-config.php và quy tắc .htaccess đã điều chỉnh theo trang web đó. Sao lưu hai tệp, dán các dòng vào wp-config.php ngay dưới dòng [WP_ALLOW_MULTISITE], và trong .htaccess thì thay quy tắc WordPress cũ bằng quy tắc mới.

Phần hướng dẫn trên màn hình sau khi cài hiển thị chú thích kết thúc chỉnh sửa đã dịch sang ngôn ngữ của trang quản trị, nhưng chú thích trong wp-config.php vẫn là tiếng Anh.
Các dòng thêm vào wp-config.php là sáu hằng số, trong đó có [MULTISITE] và [SUBDOMAIN_INSTALL]. Giá trị [SUBDOMAIN_INSTALL] là true với tên miền phụ và false với thư mục con.
[DOMAIN_CURRENT_SITE] và [PATH_CURRENT_SITE] chứa tên miền và đường dẫn cài đặt của trang web đó. Bên dưới là các dòng của bản cài tại thư mục gốc example.com theo kiểu thư mục con.
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', false );
define( 'DOMAIN_CURRENT_SITE', 'example.com' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );Cũng trường hợp đó, quy tắc WordPress trong .htaccess được thay bằng phần dưới đây, và dòng [RewriteBase] chứa đường dẫn cài đặt.
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]Lưu hai tệp xong, đăng nhập lại bằng liên kết [Đăng nhập] trên màn hình thì [Quản trị mạng] sẽ xuất hiện dưới [Các trang web của tôi] trên thanh quản trị. Nếu không đăng nhập được, hãy xóa bộ nhớ đệm và cookie của trình duyệt rồi đăng nhập lại.

[Quản trị mạng] có sáu menu: Trang quản trị, Trang web, Tài khoản, Giao diện, Plugins và Cài đặt, và bấm [Trang web] sẽ mở danh sách trang web trong mạng.

Thêm trang web con từ [Thêm trang web] cạnh tiêu đề danh sách, hoặc từ [Trang web] › [Thêm trang web] ở bên trái.

[Địa chỉ trang web (URL)] chỉ nhận chữ thường, chữ số và dấu gạch nối, và nếu [Email quản trị] chưa có trong cơ sở dữ liệu thì một người dùng mới sẽ được tạo.
Khi thêm một trang web con, thư mục [sites/2] xuất hiện trong thư mục tải lên, và cơ sở dữ liệu có thêm 10 bảng mang số thứ tự trang web sau tiền tố như [wp_2_].
Cấu trúc đường dẫn của trang web con không theo cài đặt của trang web chính mà bắt đầu từ cấu trúc mặc định gồm năm, tháng, ngày và tên bài viết, nên cần đặt riêng trong cài đặt cấu trúc đường dẫn của trang web con.
Trong trình mô phỏng bên dưới, bạn có thể bấm lần lượt theo đường dẫn từ [Công cụ] › [Cài đặt mạng] đến [Thêm trang web].
네트워크 설치 절차에 오신 것을 환영합니다!
아래의 정보를 채우고 워드프레스 사이트의 네트워크를 만들 수 있습니다. 다음 단계에서 구성 파일을 만들 것입니다.
다음 단계를 완료하여 사이트의 네트워크 만들기 기능을 활성화하세요.
- /var/www/html/wp/의 wp-config.php파일에 /* 그게 다입니다. 편집을 멈추세요! 즐겁게 발행하세요. */행 위에 다음을 추가합니다:wp-config.php에 대한 네트워크 환경설정 규칙define( 'MULTISITE', true );define( 'SUBDOMAIN_INSTALL', false );define( 'DOMAIN_CURRENT_SITE', 'example.com' );define( 'PATH_CURRENT_SITE', '/wp/' );define( 'SITE_ID_CURRENT_SITE', 1 );define( 'BLOG_ID_CURRENT_SITE', 1 );
- 다른 워드프레스 규칙을 교체하는 /var/www/html/wp/의 .htaccess 파일에 다음을 넣습니다:.htaccess에 대한 네트워크 환경설정 규칙RewriteEngine OnRewriteRule .* – [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]RewriteBase /wp/RewriteRule ^index\.php$ – [L]# add a trailing slash to /wp-adminRewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]RewriteCond %{REQUEST_FILENAME} -f [OR]RewriteCond %{REQUEST_FILENAME} -dRewriteRule ^ – [L]RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]RewriteRule . index.php [L]
이 단계를 완료하고나면, 네트워크를 활성화하고 구성합니다. 다시 로그인해야 합니다.
위의 이메일 주소가 데이터베이스에 없으면 새 사용자를 만들 것입니다.
비밀번호를 설정하는 사용자 이름과 링크를 이 이메일 주소로 보낼 것입니다.
5️⃣ Khi nào multisite không phù hợp
Multisite phù hợp với trường hợp như các trang web theo khu vực, dùng chung giao diện và plugin nhưng vận hành nội dung riêng. Nếu các trang web cần dùng chung dữ liệu hay người dùng một cách chặt chẽ, tài liệu chính thức cho biết multisite có thể không phải cách tốt nhất.
Nếu chỉ cần thiết kế trông khác nhau, bạn có thể xử lý trên một trang web duy nhất bằng plugin đổi giao diện hoặc stylesheet. Trường hợp mỗi nhóm người dùng chỉ cần thấy thông tin khác nhau cũng có thể xử lý trên một trang web bằng plugin thay đổi quyền và menu.
Hãy kiểm tra trước cả các plugin đang dùng. Không phải plugin nào trong thư mục plugin cũng chạy được trên multisite, nên tài liệu chính thức khuyên kiểm tra khả năng hỗ trợ ở trang plugin hoặc với nhà phát triển.
🔢 FAQ & nội dung đề xuất
Server
Cài đặt cơ bản htaccess cho WordPress
Bài viết tổng hợp riêng các quy tắc .htaccess cơ bản cho trang web thường và cho multisite.
SEO
Tên miền phụ VS thư mục con
Bài viết so sánh tên miền phụ và thư mục con xem bên nào có lợi hơn cho SEO.
Cài đặt
Cấu trúc đường dẫn và đường dẫn tĩnh WordPress
Giải thích cấu trúc đường dẫn và đường dẫn tĩnh được đặt riêng cho từng trang web con.
ℹ️ Thông báo tiếp thị liên kết
Nội dung trên trang này có chứa liên kết affiliate (tiếp thị liên kết). Khi khách truy cập mua sản phẩm hoặc dịch vụ qua các liên kết này, trang sẽ nhận hoa hồng từ bên bán. Trong quá trình đó, số tiền người mua phải trả (sẽ giảm khi có chương trình khuyến mãi ↓) không hề tăng lên. Giá, khuyến mãi và tình trạng hàng được đăng theo thời điểm viết bài và có thể khác với thực tế, vì vậy hãy kiểm tra lại lần cuối với bên bán trước khi mua. Việc chọn và đánh giá sản phẩm dựa trên tiêu chí riêng của trang; việc có nhận hoa hồng hay không không ảnh hưởng đến thứ tự giới thiệu hay nội dung đánh giá.