Mở Khóa Tài Năng .htaccess: Hướng Dẫn Toàn Diện Tối Ưu Onpage Từ A-Z

07/01/2025

Khám phá tập tin .htaccess

Tập tin .htaccess là gì?

Tập tin .htaccess là một tài liệu cấu hình có ảnh hưởng đến cách mà một máy chủ web phản hồi các yêu cầu khác nhau. Nó được hỗ trợ bởi một số máy chủ web, bao gồm Apache, vốn rất phổ biến trong số các nhà cung cấp dịch vụ lưu trữ web thương mại, cho phép chúng ta thực hiện điều hướng và kích hoạt các chức năng một cách linh hoạt hoặc bảo vệ dữ liệu của một số tập tin nhất định.

.htaccess là gì

Khi bạn xem xét “định nghĩa” về tập tin .htaccess, bạn đã gần như nhận ra điều mình tìm kiếm. .htaccess chính là nơi lưu trữ các hành động điều hướng URL trên website. Nếu bạn thông thạo về .htaccess… à mà không, khi bạn đọc hết bài viết này, chắc chắn bạn sẽ hiểu rõ về nó, và bạn sẽ nhận ra rằng tập tin .htaccess có công dụng “thần kỳ” mà chỉ với vài dòng lệnh, bạn sẽ thu được rất nhiều.

Tập tin .htaccess nằm ở đâu?

Tập tin .htaccess nằm ở vị trí ngang hàng với thư mục gốc (thường là public_html, www,…) và tập tin robots.txt. Bạn mở host và tìm theo đường dẫn sau:

  • Đối với host DirectAdmin, bạn tìm theo đường dẫn: Tập tin → public_html → .htaccess

.htaccess với host directAdmin

  • Đối với host Cpanel, bạn tìm theo đường dẫn: Quản lý tệp → Public_html → .htaccess

.htaccess với host Cpanel

Tôi không tìm thấy tập tin .htaccess trong danh sách?

Trên hầu hết các trình quản lý hệ thống tệp tin của hosting, các tệp có tên bắt đầu bằng dấu chấm (.) là các tệp ẩn. Điều này có nghĩa là chúng thường không…

Hiển thị theo chế độ mặc định vì lý do an ninh. Bạn chỉ cần vào phần cài đặt → tích chọn hiển thị thư mục ẩn hoặc hiển thị các tệp hệ thống là xong.

cách hiển thị tập tin .htaccess

Nếu không có tập tin .htaccess thì sao?

Bạn hãy nhấp vào phần tệp → tạo tệp mới và đặt tên là .htaccess rồi lưu lại. Bạn cũng có thể tạo một tệp trên máy tính và lưu với tên .htaccess rồi tải tệp lên thư mục gốc (trong cùng cấp với robots.txt).

tạo file .htaccess

Sau khi đã có tệp, bạn mở nó lên và thêm đoạn mã mặc định dưới đây vào:

# BẮT ĐẦU WordPress

RewriteRule ^index.php$ – [L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php [L]

# KẾT THÚC WordPress

Chức năng “kỳ diệu” của .htaccess

Đi vào trọng tâm, tôi sẽ chỉ dẫn cho bạn tổng hợp các chức năng mà .htaccess cung cấp.

Chuyển hướng www và non-www về một phiên bản duy nhất

Hai phiên bản www và non-www được Google xem là hai miền khác nhau. Điều này ảnh hưởng rất lớn đến kết quả SEO. Bạn nên giữ chỉ một trong hai phiên bản. Để thực hiện chuyển hướng về phiên bản www, bạn thêm đoạn mã sau:

RewriteEngine On

RewriteBase /

RewriteCond %{HTTP_HOST} !^www.domain.com$ [NC]

RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]

Nếu không muốn sử dụng www, bạn hãy thêm đoạn mã sau:

RewriteEngine On

RewriteBase /

RewriteCond %{HTTP_HOST} !^domain.com$ [NC]

RewriteRule ^(.*)$ http://domain.com/$1 [L,R=301]

Xử lý lỗi 4xx hoặc 5xx và chuyển hướng đến trang lỗi tùy chỉnh

Trong quá trình hoạt động của website sẽ không tránh khỏi các lỗi như sau:

Các lỗi phổ biến từ người dùng:

401: yêu cầu xác thực

403: Không được phép truy cập

404: Nội dung không tồn tại/đã bị xóa

405: Phương thức bị sai

Các lỗi phổ biến từ máy chủ:

500: lỗi máy chủ nội bộ

503: Dịch vụ không khả dụng

504: Hết thời gian chờ

505: Phiên bản HTTP không được hỗ trợ

Bạn có thể tận dụng chức năng chuyển hướng đến các trang thông báo lỗi đã thiết kế sẵn bằng đoạn mã sau:
ErrorDocument 401 /error/401.php

ErrorDocument 403 /error/403.php

ErrorDocument 404 /error/404.php

ErrorDocument 405 /error/405.php

ErrorDocument 500 /error/500.php

ErrorDocument 503 /error/503.php

ErrorDocument 504 /error/504.php

ErrorDocument 505 /error/505.php

Đặt mật khẩu cho thư mục hoặc tệp

Nếu bạn muốn bảo vệ một số thư mục hoặc tệp quan trọng, hãy thêm đoạn mã sau:
# Đặt mật khẩu cho thư mục

resides

AuthType basic

AuthName "Phần này đã bị khóa"

AuthUserFile /home/path/.htpasswd

AuthGroupFile /dev/null

Require valid-user

# CÀI ĐẶT mật khẩu

<files secure.php="">

AuthType Basic

AuthName "Nhắc nhở"

AuthUserFile /home/path/.htpasswd

Require valid-user

</files>

Thay đổi phần mở rộng của đường dẫn

Khi bạn truy cập một số trang web, bạn thường gặp những phần mở rộng như: .php, .html… Tuy rằng điều này không gây ảnh hưởng lớn đến SEO nhưng việc loại bỏ chúng sẽ tạo vẻ chuyên nghiệp hơn, đồng thời làm URL ngắn gọn hơn. Ngoài ra, nếu bạn muốn hiển thị phần mở rộng .html cho đẹp hơn, hãy tiến hành theo cách sau:

  • Loại bỏ phần nối .php khỏi đường dẫn
    RewriteRule ^(([^/]+/)*[^.]+)$ /$1.php [L]
  • Loại bỏ phần nối .html khỏi đường dẫn
    RewriteRule ^(([^/]+/)*[^.]+)$ /$1.html [L]
  • Đưa từ khóa chính của sản phẩm lên URL

Một chuyên gia SEO cần phải khéo léo đưa từ khóa chính lên đầu URL. Tôi có một ví dụ: tenmien.com/product.php?id=12. Nếu bạn muốn biến nó thành: tenmien.com/product/ipod-nano/12.html, bạn thực hiện như sau:

RewriteEngine on

RewriteRule ^product/([a-zA-Z0-9_-]+)/([0-9]+).html$ product.php?id=$2

  • Thay đổi phần nối .php thành .html trong đường dẫn
    RewriteRule ^(.*).html$ $1.php [R=301,L]

Tạo chuyển hướng 301 cực kỳ hiệu quả

Khi bạn có nhu cầu chuyển hướng toàn bộ website cũ sang trang web mới, hoặc chuyển một bài viết cũ sang bài viết mới thì redirect 301 được xem là giải pháp tối ưu nhất. Chuyển hướng 301 không chỉ giúp bạn điều hướng URL mà còn giữ nguyên dữ liệu và bảo đảm thứ hạng tìm kiếm trên Google. Để thực hiện, hãy làm theo hướng dẫn dưới đây:

  • Để chuyển hướng toàn bộ miền:

RewriteEngine On

RewriteRule ^(.*)$ http://tenmien.com/$1 [R=301,L]

  • Để chuyển hướng một trang cụ thể: ví dụ bạn cần chuyển một bài cũ là: http://tenmien.com/danh-muc-cu/bai-viet-cu.htm sang bài mới là: http://tenmien.com/bai-viet-moi.htm, bạn thêm mã sau đây:

Redirect 301 /danh-muc-cu/bai-viet-cu.htm http://tenmien.com/bai-viet-moi.htm

Kích hoạt tính năng nén Gzip

Tính năng này sẽ nén tài nguyên của website trên máy chủ trước khi gửi đến người dùng, giúp tăng tốc độ tải trang. Hãy thêm đoạn mã sau vào tệp .htaccess:

## EXPIRES CACHING ##

<IfModule mod_expires.c>

ExpiresActive On

ExpiresByType image/jpg "access plus 1 month"

ExpiresByType image/jpeg "access plus 1 month"

ExpiresByType image/gif "access plus 1 month"

ExpiresByType image/png "access plus 1 month"

ExpiresByType text/css "access plus 1 month"

ExpiresByType application/pdf "access plus 1 month"

ExpiresByType text/x-javascript "access plus 1 month"

ExpiresByType application/javascript "access plus 1 month"

ExpiresByType application/x-javascript "access plus 1 month"

ExpiresByType application/x-shockwave-flash "access plus 1 month"

ExpiresByType image/x-icon "access plus 1 year"

ExpiresDefault

access in addition to 2 days

</IfModule>

## CACHING EXPIRATION ##

# 1 Month for all of your static resources

<filesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf|woff)$">

Header set Cache-Control "max-age=2592000, public"

</filesMatch>

# 1 DAY for rss feeds and bot crawlers

<filesMatch ".(xml|txt)$">

Header set Cache-Control "max-age=86400, public, must-revalidate"

</filesMatch>

# 4 HOURS for your genuine articles files

<filesMatch ".(html|htm)$">

Header set Cache-Control "max-age=14400, must-revalidate"

</filesMatch>

<IfModule mod_deflate.c>

# compress text, html, javascript, css, xml:

AddOutputFilterByType DEFLATE text/plain

AddOutputFilterByType DEFLATE text/html

AddOutputFilterByType DEFLATE text/xml

AddOutputFilterByType DEFLATE text/css

AddOutputFilterByType DEFLATE application/xml

AddOutputFilterByType DEFLATE application/xhtml+xml

AddOutputFilterByType DEFLATE application/rss+xml

AddOutputFilterByType DEFLATE application/javascript

AddOutputFilterByType DEFLATE application/x-javascript

AddType x-font/otf .otf

AddType x-font/ttf .ttf

AddType x-font/eot .eot

AddType x-font/woff .woff

AddType image/x-icon .ico

AddType image/png .png

</IfModule>

Once compression is activated, you can visit the Google PageSpeed Insights tool to verify whether this feature is operational on your site.

Activating gzip compression with .htaccess

Learn more: GZIP in Joomla

Securing wp-config file on WordPress

The wp-config.php file is a crucial file within the WordPress platform. It includes information such as: Database, localhost, username, password, etc. You can enhance the security of this file by implementing a password via the following code:

<files wp-config.php>

order allow,deny

deny from all

</files>

Redirect http to https and vice versa

  • To convert http to https, insert this code into .htaccess as follows:
    RewriteEngine on

RewriteCond %{HTTPS} !=on [NC]

RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}

“`html
<R=301,L]

Chú ý: tập tin .htaccess chỉ có thể chứa một dòng RewriteEngine on. Nếu đã tồn tại thì bạn không nên thêm vào nữa nhé.

  • Để quay lại:
    RewriteEngine On

RewriteCond %{HTTPS} on

RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Cấm địa chỉ IP truy cập trang web của bạn

Đôi khi bạn sẽ thấy một số địa chỉ IP truy cập vào trang của bạn một cách “quá đáng”, làm tiêu tốn hết băng thông của bạn. Hay nói chính xác hơn là một vài kẻ spam đang xâm nhập vào website của bạn. Bạn có thể áp dụng cách giải quyết như sau:

ORDER ALLOW,DENY

DENY FROM 192.168.1.1

DENY FROM 234.45.67.89

DENY FROM 123.45.67.89

ALLOW FROM ALL

Nếu bạn cần chặn một dải IP, thực hiện như sau:

ORDER ALLOW,DENY

DENY FROM 192.168.

DENY FROM 123.0.0.

ALLOW FROM ALL

Hãy thay thế các thông số IP bằng địa chỉ xác định kẻ spam vào trang web của bạn.

Bạn có thể ngăn việc bị ăn cắp băng thông bằng cách thêm đoạn mã sau:

RewriteCond %{HTTP_REFERER} !^http://(www.)?tenmien.com(/)?.*$ [NC]

RewriteCond %{HTTP_REFERER} !^http://(www.)?chophep.tenmien.com(/)?.*$ [NC]

RewriteRule .*.(gif|jpg|jpeg|bmp|png|js|css|html|htm$ http://tenmien.com/images/canhbao.png [R,NC]

Phần màu hồng cho phép bạn chỉ định nhiều tên miền. Bạn có thể nhập địa chỉ trang web của mình và các trang web khác mà được phép chia sẻ.

Phần màu xanh lục là các định dạng tệp tin mà bạn muốn ngăn không cho bị hotlink.

Phần màu xanh lam là bức ảnh bạn đã thiết kế để hiển thị thông báo khi có website khác thực hiện hotlink.

Chọn trang mặc định

Thường thì các dịch vụ hosting sẽ mặc định chạy các trang như: index.html, home.html, index.php… Nhưng nếu bạn muốn thiết lập một trang khác làm trang mặc định? Rất đơn giản!

Chỉ cần thêm đoạn mã này vào:

DirectoryIndex default.html

Với default là tên của trang thiết lập mặc định.

Chuyển đổi thư mục này sang thư mục khác

Giả sử bạn có một URL là: https://baominhwin.com/seo-len-dinh và bạn muốn chuyển nó thành https://baominhwin.com/dich-vu-seo. Bạn chỉ cần thêm đoạn mã này vào tệp .htaccess:

Redirect 301 /seo-len-dinh/ https://baominhwin.com/dich-vu-seo

Khi bạn truy cập một liên kết từ facebook, bạn có thấy URL thêm đoạn ?fbclid=abcxyz… phải không? Tôi sẽ chỉ cho bạn cách xóa cái đuôi rườm rà đó. Thật ra việc này không ảnh hưởng gì đến SEO cả! Như vậy chỉ để sao chép URL đi đâu đó trông đỡ dài và tránh nhầm lẫn thôi!
RewriteBase /

RewriteCond %{QUERY_STRING} "fbclid=" [NC]

RewriteRule (.*) /$1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME}
```<!-d

RewriteRule . /index.php [L]

Xóa một phần tử trong đường dẫn

This is intriguing! You have a URL like this: https://baominhwin.com/seo/8-cong-cu-nghien-cu-tu-khoa-mien-phi.html

and you wish to eliminate the category seo to shorten it to: https://baominhwin.com/8-cong-cu-nghien-cu-tu-khoa-mien-phi.html without any repercussions? Here’s how to do it:

RewriteRule ^seo(.+)$ http://127.0.0.1$1 [R=301,L]

Completed!

Chuyển hướng AMP khi không dùng nữa

Google’s AMP tool allows your website to load at lightning speed on mobile devices. However, if you’re no longer using it and have disabled the plugin, your URLs won’t redirect to the target page immediately, you need to perform the following:

  • For articles:

RewriteEngine On

RewriteCond% {REQUEST_URI} (. +) / amp (. *) $

RewriteRule ^% 1 / [R = 301, L]

  • For the entire site:

rewrite ^ / (. *) / amp http://tenmien.com/$1 permanently;

 

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *