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.
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
- Đối với host Cpanel, bạn tìm theo đường dẫn: Quản lý tệp → Public_html → .htaccess
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.
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).
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.
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.
Ngăn chặn việc đánh cắp băng thông (hotlink)
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
Xóa tham số facebook (fbclick) khi mở liên kết từ facebook
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;