Redirect 301 htaccess: cách thêm redirect 301 bằng code trong file .htaccess của WordPress từ A đến Z

Nếu bạn đang tìm cách redirect 301 đơn giản từ URL này sang URL khác trong trang WordPress, bạn chỉ cần làm theo các hướng dẫn trong bài viết này.

Nhưng nếu bạn muốn tạo redirect 301 phức tạp hơn, điển hình như redirect từ http sang https, từ www.tenmiencuaban.com sang tenmiencuaban.com,… thì hãy đọc tiếp

Bài viết này sẽ hướng dẫn bạn cách thêm tất cả các thể loại redirect 301 thông dụng nhất bằng code trong file .htaccess của trang WordPress, cách tìm file .htaccess trong root folder của WordPress, cách backup file .htaccess phòng trường hợp có lỗi phát sinh và kể cả cách đặt code redirect vào vị trí nào trong file .htaccess (trước # BEGIN WordPress hay # END WordPress).

Rốt cuộc thì file .htaccess của WordPress nằm ở đâu?

File .htaccess của WordPress nằm chung với các thư mục có chứa tiền tố wp (wp-admin, wp-content, wp-includes) trong thư mục tenmiencuaban.com nằm trong root folder của WordPress. Root folder của WordPress thường được đặt tên là public_html.

Ví dụ, nếu trang WordPress của bạn có tên miền là tenmiencuaban.com thì root folder của nó là public_html, tên miền của trang web là một thư mục nằm trong root folder public_html (đường đẫn là public_html/tenmiencuaban.com) và file .htaccess sẽ nằm trong thư mục tenmiencuaban.com (đường dẫn là public_html/tenmiencuaban.com/.htaccess).

Trong thư mục tenmiencuaban.com, bạn sẽ thấy 3 thư mục của WordPress có tiền tố “wp-” là wp-admin, wp-content, wp-includes. Nếu bạn sử dụng công cụ File Manager của các dịch vụ hosting, bạn sẽ thấy file .htaccess nằm ngay bên dưới các thư mục đó.

file .htaccess nằm ở đâu
Vị trí của file .htaccess, path là public_html/tenmiencuaban.com/.htaccess

Nếu bạn sử dụng FTP client như FileZilla hay SmartFTP, file .htaccess thường sẽ bị ẩn đi vì nó là file hệ thống quan trọng của WordPress (file có dấu chấm). Nếu muốn tìm thấy nó, bạn phải thay đổi cài đặt của FTP client mới thấy được file .htaccess trong root folder.

Ví dụ, nếu bạn sử dụng FileZilla, bạn có thể chọn cài đặt Force showing hidden files trong Server ở trên thanh menu của FileZilla để hiển thị file ẩn.

hiển thị file ẩn trong file zilla
file .htaccess nằm ở đâu trong filezilla
Vị trí của file .htaccess trong FileZilla

Nếu bạn sử dụng File Manager của cPanel, bạn có thể chọn Show Hidden Files (dotfiles) để hiển thị file .htaccess trước khi truy cập vào File Manager của cPanel.

hiển thị file .htaccess trong cpanel
vị trí file .htaccess trong cpanel manager
Vị trí của file .htaccess trong File Manager cPanel

Nhà tôi 3 đời backup file .htaccess, đến đời tôi thì quên backup 🙁

Nếu bạn đã tìm thấy file .htaccess trong root folder, làm ơn hãy tải nó về và lưu nó vào chỗ nào đó trong máy tính của bạn trước khi thực hiện bất kỳ chỉnh sửa nào trong file .htaccess gốc.

Bạn bắt buộc phải làm như vậy.

.htaccess là file hệ thống RẤT QUAN TRỌNG. Chỉ cần sơ ý một chút khi thêm code hay chỉnh sửa là trang WordPress của bạn có thể tiêu tùng.

Khi tải file .htaccess về máy, bạn sẽ thấy nó mất đi dấu chấm. Điều này là bình thường, bạn không cần phải lo lắng.

file .htaccess tải về máy không có dấu chấm

Bạn hãy đổi tên cho nó thành 1htaccess để làm file backup.

file .htaccess backup được đổi tên thành 1htaccess

Trong trường hợp file .htaccess ở trong root folder của trang WordPress bị lỗi, bạn hãy ngay lập tức tải file backup của .htaccess mà bạn đã tải về máy (file .htaccess mà bạn đã đổi tên) lên root folder.

Sau khi tải lên xong, bạn đổi tên file .htaccess đang bị lỗi trong root folder thành error_htaccess và đổi tên file htaccess backup (1htaccess) thành .htaccess (nhớ đừng quên dấu chấm).

Tôi không tìm thấy file .htaccess của WordPress. Làm sao để tạo file đó?

Nếu vì một lý do nào đó mà bạn không thấy file .htaccess trong root folder của trang WordPress thì bạn có thể tạo lại file .htaccess mặc định của WordPress trong root folder và copy paste những dòng code dưới đây vào file đó (đây là đoạn code .htaccess mặc định do chính WordPress cung cấp).

# BEGIN WordPress

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

Tất nhiên đây chỉ là phương án cuối cùng trong trường hợp bất khả kháng bởi vì bạn đã mất đi toàn bộ code htaccess của các plugin khác trong trang WordPress.

Khi bạn cài đặt WordPress, file .htaccess mặc định chắc chắn đã phải xuất hiện từ đầu. Nếu bạn không tìm thấy nó thì chứng tỏ nhà cung cấp dịch vụ hosting của bạn có vấn đề hoặc phiên bản WordPress đó có vấn đề.

Thêm code redirect 301 vào chỗ nào trong file .htaccess của trang WordPress? (trước # BEGIN WordPress hay # END WordPress)

Đây là một vấn đề nhức nhối nhưng lại chẳng mấy ai đề cập.

Bạn tìm thấy file .htaccess rồi, bạn copy code redirect 301 ở bên dưới rồi. Nhưng giờ đến phần paste code. Ủa rồi paste vào đâu, paste như thế nào vào file .htaccess? Sao thêm code redirect rồi mà trang web nó không redirect gì hết?

Đó là vì bạn phải paste code redirect vào ngay trước phần thiết lập WordPress trong file .htaccess (ở phía trên dòng # BEGIN WordPress) thì redirect mới có tác dụng.

Ví dụ, giả sử bạn muốn redirect old-domain.com sang domain mới là new-domain.com.

Thêm code redirect 301 vào file .htaccess trong root folder của domain cũ như thế này là SAI.

# BEGIN WordPress

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

# Redirect từ domain cũ sang domain mới (SAI)
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^old-domain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.old-domain\.com$
RewriteRule ^(.*)$ http://www.new-domain.com [R=301,L]

Bạn phải thêm code redirect lên trước dòng # BEGIN WordPress mới ĐÚNG.

# Redirect từ domain cũ sang domain mới (ĐÚNG)
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^old-domain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.old-domain\.com$
RewriteRule ^(.*)$ http://www.new-domain.com [R=301,L]

# BEGIN WordPress

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

Bonus thêm 3 điều bạn cần nhớ khi thêm code redirect vào file .htaccess:

  1. Không thêm hay chỉnh sửa bất cứ thứ gì ở giữa 2 dòng # BEGIN WordPress và # END WordPress.
  2. Không thêm code redirect ở dưới dòng # END WordPress, phải thêm code redirect ở phía trên dòng # BEGIN WordPress thì redirect mới có tác dụng.
  3. Khi muốn thêm code redirect, bạn phải thêm code redirect vào file .htaccess trong root folder của trang WordPress mà bạn muốn redirect, không phải trang WordPress mà bạn muốn được redirect tới. Ví dụ, nếu bạn muốn redirect từ old-domain.com sang new-domain.com thì bạn phải thêm code redirect vào trong file .htaccess của trang old-domain.com chứ không phải new-domain.com.

Tổng hợp các thể loại code redirect 301 .htaccess thông dụng nhất của WordPress

Tất cả những gì bạn cần làm là copy code redirect 301 trong bộ sưu tập code redirect 301 dưới đây, paste vào file .htaccess như đã hướng dẫn ở trên và chỉnh sửa các liên kết URL sao cho phù hợp với tên miền hay địa chỉ URL mà bạn muốn redirect.

Redirect 301 đơn giản từ URL này sang URL khác

Như đã đề cập, nếu bạn chỉ cần redirect URL của post/page cũ sang URL của post/page mới, bạn có thể tải và dùng plugin miễn phí Redirection trong WordPress để thêm redirect 301 đơn giản.

Nhưng nếu bạn muốn thêm redirect bằng code thì sau đây là đoạn code (đây cũng là đoạn code redirect 301 đơn giản nhất để redirect URL này sang URL khác trong trang WordPress)

Redirect 301 /old-url http://www.example.com/new-url/

Redirect 301 toàn bộ URL trong domain cũ sang domain mới

Ví dụ, bạn có bài viết cũ có URL là old-domain.com/bai-viet/ thì nó sẽ redirect sang new-domain.com chứ không phải redirect sang new-domain.com/bai-viet/.

Có 2 đoạn code dùng để redirect 301 toàn bộ URL trong domain cũ sang domain mới.

Đây là đoạn code đầu tiên.

Redirect 301 / http://www.example.com/

Và đây là đoạn code thứ 2.

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^old-domain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.old-domain\.com$
RewriteRule ^(.*)$ http://www.new-domain.com [R=301,L]

Redirect 301 domain cũ sang domain mới nhưng vẫn giữ nguyên đường dẫn URL

Ngược lại với phía trên, đoạn code này sẽ redirect chính xác từ olddomain.com/bai-viet/ sang newdomain.com/bai-viet/ chứ không redirect toàn bộ URL trong domain cũ về một URL duy nhất của root domain.

Nhưng nếu vậy thì đối với code redirect này, domain mới của bạn phải có các liên kết URL giống với URL trong domain cũ, nếu không sẽ dẫn đến lỗi trang không tồn tại 404.

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^old-domain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.old-domain\.com$
RewriteRule (.*) http://www.new-domain.com/$1 [R=301,L]

Redirect 301 mọi trang có giao thức http:// (không có và có www) sang https:// (không có www)

RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule .* https://example.com%{REQUEST_URI} [R=301,L]

Đọc bài viết này nếu bạn chưa biết giao thức http hay https là gì.

Redirect 301 mọi trang có giao thức http:// (không có và có www) sang https:// (không có www) kết hợp với redirect 301 mọi trang có giao thức https:// (có www) sang https:// (không có www)

RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule .* https://example.com%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule .* https://example.com%{REQUEST_URI} [R=301,L]

Redirect 301 subdomain sang root domain (domain chính)

Đọc bài viết này để biết subdomain là gì và tại sao bạn không nên tạo subdomain (đặc biệt là subdomain cho phần blog của trang web).

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ [NC]
RewriteRule .* http://www.example.com%{REQUEST_URI} [R=301,L]

Redirect 301 trang blog subdomain sang subfolder blog của root domain

Ví dụ, bạn có subdomain là blog.example.com, bạn muốn redirect nó sang example.com/blog/ thì đây là đoạn code ví dụ.

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^blog\.example\.com$ [NC]
RewriteRule (.*) http://www.example.com/blog/$1 [R=301,L]

Redirect 301 subdomain sang subfolder của root domain

Tương tự, đây là đoạn code redirect mọi trang subdomain sang subfolder/subdirectory của root domain mà không nhất thiết phải là blog.

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ [NC]
RewriteRule (.*) http://www.example.com/subdirectory/$1 [R=301,L]