Ae nào làm website mà không biết đến file .htaccess thì lên xem lại. File này thường bị ẩn trên hosting, để hiển thị file kết nối hosting chọn File Manager-> Settings nằm ở góc trên bên phải màn hình nó hiện thị ra popup thì tick chọn Show Hidden Files (dotfiles) save lại thấy.

1. htaccess là gì?
Tập tin .htaccess (hypertext access) là một file có ở thư mục gốc của các hostting và do apache quản lý, cấp quyền. File .htaccess có thể điều khiển, cấu hình được nhiều thứ với đa dạng các thông số, nó có thể thay đổi được các giá trị được set mặc định của apache.
Nếu được khai thác tốt thì .htaccess sẽ giúp được bạn rất nhiều việc mà tốn rất ít công sức đơn giản chi vài dòng lệnh là được. Cách thức mà bạn sử file .htaccess cũng thật đơn giản cứ mở bằng một trình soạn thảo nào đó chỉnh sửa xong save as lại với thành file .htaccess là xong.
2. Bảo mật WordPress hiệu quả bằng file .htaccess
Những thư mục được khuyến cáo nên tạo file .htaccess
để ngăn các tập tin .php
truy cập trái phép bao gồm /wp-includes/, /wp-content/ và /wp-content/uploads/.
Các bạn có thể tạo file .htaccess
ngay trên host bằng cách sử dụng chức năng tạo file mới của cPanel/ DirectAdmin hoặc tạo bằng NotePad trên máy tính rồi upload lên host, vào đúng thư mục tương ứng.
Bỏ hoặc thêm www vào domain:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Thêm WWW vào URL RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} !^www.domain.com$ [NC] RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301] // Không theme WWW vào URL RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} !^domain.com$ [NC] RewriteRule ^(.*)$ http://domain.com/$1 [L,R=301] |
Redirect đến trang thông báo lỗi riêng với file .htaccess
Trong web thì có nhiều lỗi như: 401, 403, 404, 500 … là các lỗi phổ biến, nếu không redirect nó sẽ trả về trình duyệt của người dùng một thông báo rất xấu xí, không chuyên nghiệp và tạo cảm giác khó chịu khi bị lỗi, bạn có thể dùng file .htaccess để chỉnh redirect đến trang thông báo lỗi mà bạn đã định sẳn.
1 2 3 4 5 6 7 |
ErrorDocument 401 /error/401.php ErrorDocument 403 /error/403.php ErrorDocument 404 /error/404.php ErrorDocument 500 /error/500.php |
Cài đặt 301 Redirect có lợi cho SEO
Nếu bạn sử dụng plugin Seo trả phí như Yoast Premium / Rankmath Seo…. nó hỗ trợ redirect trực tiếp, còn muốn làm thủ công thì làm theo đoạn này add vào .htacess
1 2 3 4 5 6 7 8 9 |
// 1 Trang Redirect 301 /old/old.htm http://domain.com/new.htm // chuyển domain RewriteEngine On RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L |
Chặn hotlink với file .htaccess:
Hotlink chính là link trực tiếp đến trang web của người khác lấy các file về sử dụng trên website, có thể là file hình ảnh, video, tài liệu … Hotlink là một giải pháp cho những blog tạm, không chắc chắn và những ai hay đi copy bài người viết của các trang web khác. Hotlink sẽ làm tốn một lượng băng thông rất lớn vì các site khác lấy file trực tiếp từ host của bạn. Sau đây là cách mà bạn ngăn chặn việc đó bằng file .htaccess
1 2 3 4 5 6 7 8 9 10 11 |
Options +FollowSymlinks #No hotlink RewriteEngine On RewriteCond %{HTTP_REFERER}!^$ RewriteCond %{HTTP_REFERER}!^http://(www.)?domain.com/[nc] RewriteRule .*.(gif|jpg|png)$ http://domain.com/images/nohotlink.gif[nc] |
Bỏ đuôi mở rộng của file web “.php”:
Khi duyệt website muốn địa chỉ URL phải đẹp, chuyên nghiệp, và đôi lúc muốn che giấu công nghệ web đang sử dụng cũng có thể áp dụng phương pháp này. bạn vào file .htaccess gõ mã lệnh như sau:
1 |
RewriteRule ^(([^/]+/)*[^.]+)$ /$1.php [L] |
Chuyển .php sang .html trong url:
Công việc này cũng khá đơn giản với file cấu hình .htaccess này, có một số lý do khiến bạn làm công việc này, đó là bạn muốn bảo mật, đuôi .html đẹp hơn .php, rồi để tối ưu SEO … bạn làm như sau:
1 |
RewriteRule ^(.*).html$ $1.php [R=301,L] |
Thêm dấu “/” vào cuối URL:
Mã nguồn WordPress khi bạn tối ưu URL thì bạn sẽ thấy được có dấu “/” ở sau mỗi URL, điều đó là sẽ tốt cho SEO. Tránh bị các công cụ tìm kiếm cho là trùng lắp nội dung.
1 2 3 4 5 6 7 8 9 10 11 |
#Thêm / vào cuối URL RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !# RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ http://domain.com/$1/ [L,R=301] |
Cấm IP truy cập vào site:
Mình thì hay dùng thằng WordFence làm việc này, thường thì hacker thường hay sử dụng tool kiểm thử user, mình thường set nhập sai quá 3 lần là khóa IP tầm đôi tháng cho yên tâm. Còn ae thích tay to thì dùng đoạn này add vào htaccess
1 2 3 4 5 |
allow from all deny from 192.168.1.123 deny from 192.168 |
Bảo vệ file trong host dùng .htaccess:
Bạn muốn tăng sự bảo mật cho trang web của bạn bằng cách bảo vệ các file, không cho phép truy cập trực tiếp vào các file trong host bạn có thể sử dụng cách sau, và cách này sẽ trả về lỗi 403 cho trình duyệt.
1 2 3 4 5 6 7 8 9 |
# Bảo vệ file dùng .htaccess <files .htaccess=""> order allow,deny deny from all </files> |
Đặt password cho thư mục và file:
Trong một số trường hợp bạn muốn đặt mật khẩu cho file và thư mục, tránh sự truy cập trái phép của người khác bạn có thể dùng file .htaccess và gõ mã lệnh như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#Đặt Pass cho thư mục resides AuthType basic AuthName "Thư mục này đã được bảo vệ" AuthUserFile /home/path/.htpasswd AuthGroupFile /dev/null Require valid-user # Đặt Pass cho file <files secure.php=""> AuthType Basic AuthName "Prompt" AuthUserFile /home/path/.htpasswd Require valid-user </files> |
Chuyển dấu “_” thành “-” trong URL:
Dấu _ hay dấu – thì đều là dấu phân cách để hiểu được và phân biệt giữa chữ này với chữ kia tuy nhiên người xem lại thích dấu “-“hơn vì nó dễ nhìn và có cảm giác phân cách hơn dấu kia nhìn giống như một chuổi dài liên tục, mặt khác đâu “-” có thể sẽ có lợi cho SEO. bạn chuyển đổi bằng cách sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteRule !.(html|php)$ - [S=4] RewriteRule ^([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4-$5 [E=uscor:Yes] RewriteRule ^([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4 [E=uscor:Yes] RewriteRule ^([^_]*)_([^_]*)_(.*)$ $1-$2-$3 [E=uscor:Yes] RewriteRule ^([^_]*)_(.*)$ $1-$2 [E=uscor:Yes] RewriteCond %{ENV:uscor} ^Yes$ RewriteRule (.*) http://domain.com/$1 [R=301,L] |
Bật tính năng nén file Gzip:
Bạn có thể bật chức năng này lên, và rất quan trọng trong việc backup dữ liệu, mục đích để tải dữ liệu được nhanh chóng và tranh mất mát. bạn vào trong file .htaccess và làm như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
## 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 plus 2 days" </IfModule> ## EXPIRES CACHING ## # 1 Month for all your static assets <filesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf|woff)$"> Header set Cache-Control "max-age=2592000, public" </filesMatch> # 1 DAYS for rss feeds and robots <filesMatch ".(xml|txt)$"> Header set Cache-Control "max-age=86400, public, must-revalidate" </filesMatch> # 4 HOURS for your real 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> |
Không cho truy cập file wp-config.php của WordPress:
Một ứng dụng nhỏ mà rất quan trọng trong việc bảo mật file đã đề cập ở trên. Trong WordPress bạn cũng biết là file wp-config.php rất quan trọng chứa thông số về database username, pass… mình sẽ cấp không cho truy cập trang bằng cách như sau:
1 2 3 4 5 6 7 8 9 |
Bảo mật file wpconfig.php <files wp-config.php> order allow,deny deny from all </files> |
Xóa category trong đường dẫn website WordPress
Khi thực hiện dịch vụ SEO trên các web wordpress nếu bỏ /category hoặc /danh-muc trên url category rất có lợi. Lúc này bạn đẩy tên danh mục về gần root.
Có nhiều cách để xóa trong đó htaccess là 1 trong những cách hiệu quả, bạn có thể chèn đoạn mã sau:
1 |
RewriteRule ^category/(.+)$ http://yoursite.com/$1 [R=301,L] |
Dùng .htaccess redirect tên miền cũ qua tên miền mới
Khi bạn quyết định chuyển 1 website qua 1 tên miền mới thì 1 trong những điềuquan trọng là phải điều hướng (redirect) tên miền cũ qua tên miền mới.
Nếu điều hướng đúng thì các trang ở tên miền cũ cũng sẽ được điều hướng qua đúng trang tương ứng trên tên miền mới. Nếu redirect sai thì đồng nghĩa bạn sẽ mất rất nhiều lượng truy cập cũng như rớt hàng trên công cụ tìm kiếm.
Bạn nên dùng cách điều hướng sau trong trường hợp bạn không thay đổi cấu trúc web (các trang và links) mà chi đơn giản chuyển đổi tên miền. Với cách này các bạn chỉ cần đơn gian thêm dòng code này vào file .htaccess nằm trong root của domain cũ.
1 2 3 4 5 6 |
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} ^olddomain.com$ [OR] RewriteCond %{HTTP_HOST} ^www.olddomain.com$ RewriteRule (.*)$ http://www.newdomain.com/$1 [R=301,L] </IfModule> |
Redirect http qua https bằng .htaccess Đối với Linux & cPanel
Các bạn thêm đoạn code bên dưới vào file htaccess
1 2 3 |
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] |
Lưu ý không được có 2 dòng “RewriteEngine On” trong file htaccess
Chống spam bình luận
Loại bỏ 1 số hình thức spam phổ biến, bằng cách sử dụng .htaccess. Không có một cách duy nhất nào là triệt để, bạn sẽ cần kết hợp với plugin như Akismet.
1 2 3 4 5 6 7 8 |
# Avoid comment spam <IfModule mod_rewrite.c> RewriteCond %{REQUEST_METHOD} POST rewriteCond %{REQUEST_URI} .wp-comments-post\.php* RewriteCond %{HTTP_REFERER} !.cuongcong.com.* [OR] RewriteCond %{HTTP_USER_AGENT} ^$ RewriteRule (.*) ^http::///%{REMOTE_ADDR}/$ [R=3D301,L] </IfModule> |
Ngăn chặn tìm kiếm người dùng
Nếu bạn truy cập hungwordpress.com/?author=1 (thường là ID của admin). hacker biết được username, họ sẽ đoán ra password.
Để bảo vệ thông tin người dùng, bạn sử dụng đoạn code sau:
1 2 3 4 |
<IfModule mod_rewrite.c> RewriteCond %{QUERY_STRING} ^author=([0-9]*) RewriteRule .* - [F </IfModule> |
Chặn truy cập từ một website khác
Nếu bạn phát hiện ra những liên kết đến từ một số trang web mà hành vi có sự bất thường. Bạn không muốn những người truy cập từ những web đó vào web của bạn. Sử dụng mã sau:
1 2 3 4 5 6 |
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_REFER} website1.com [NC,OR] RewriteCond %{HTTP_REFERER} website2.net [NC,OR] RewriteRule .* - [F] </ifModule> |
Kích hoạt cache
.htaccess cho phép bạn cache tài nguyên trên trình duyệt của người dùng để website chạy nhanh hơn.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# Mise en cache des fichiers in le navigateur <IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 1 month" ExpiresByType text/html "access plus 0 AExpiresByType " text/xml AexpiresByType appfont-ttf "access plus 1 month month" ExpiresByType font/opentype "access plus 1 month month"" ExpiresByType plus Application/x-font-woff2 "access plus 1 month month" ExpiresByType image/svg+xml "access plus 1 month" ExpiresByType application/vnd.ms-fontobject "access plus 1 month month" ExpiresByType image/jpg "access plus 1 month"AExpiresByType Axpires image 1 month" ExpiresByType image/gif "access plus 1 monthshockwave-flash "access plus 1 week" ExpiresByType image/x-icon "access plus 1 week" </IfModule> # En-têtes Header unset ETag FileETag None <ifModule mod_headers.c> <filesMatch "\.(ico|jpe?gg|png|gif|swf)$"> Header set Cache-Control "public" /ilesMatch> <filesMatch "\.(css)$$"> Header set Cache-Control "public" </ilesMatch> <filesMatch "\.(js)$$"> Header set Cache-Control "private" </ilesMatch> <filesMatch "\.(x?html?|php)$"> Header set Cache-Control Cache-Control "private, must-revalidate" </ilesMatch> </ifModule> |
Vô hiệu hóa truy cập tài nguyên
WordPress sử dụng scripts trong thư mục wp-includes
để thực hiện các kịch bản. Thật nguy hiểm nếu một người dùng hay virus có thể thêm vào và thực thi một kịch bản độc hại. Bạn có thể vô hiệu hóa người dùng truy cập trực tiếp khu vực này:
1 2 3 4 5 6 7 |
RewriteEngine On RewriteBase / RewriteRule ^wp-admin/includes/ - [F,L] rewriteRule !^wp-includes/ - [S=3] RewriteRule ^wp-includes/[^^./]+[\.php$ - [F,L] RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L] RewriteRule ^wp-includes/theme-compat/ - [F,L] |
Từ chối tấn công XSS
Đoạn mã dưới đây bảo vệ từ click chuột, chống lại các mối đe dọa & chặn nội dung trong trường hợp bị tấn công XSS.
1 2 3 4 5 6 |
# Protections diverses (XSS, clickjacking and MIME-Type sniffing) <ifModule mod_headers.c> Header set X-XSS-Protection "1; mode=block" Header always append X-Frame-Options SAMEORIGIN Header set X-Content-Type-Options: "nosniff” </ifModule> |
Giới hạn truy cập wp-admin
wp-admin là hệ thống quản trị của WordPress, nơi bạn sẽ đăng bài viết, cấu hình menu, giao diện. Không ai có thể truy cập bất hợp pháp, bạn sẽ cần tài khoản đăng nhập để có quyền quản trị website. Ở dưới đây là những gì bạn có thể tăng tính bảo mật với file .htaccess mà bạn sẽ cần đặt trong thư mục wp-admin.
Chỉ cho phép người dùng có IP này sẽ được truy cập vào folder wp-admin. Điều này sẽ ngăn cấm người xa lạ kết nối vào website của bạn, kể cả khi họ có được tài khoản đăng nhập.
1 2 3 4 5 6 7 8 9 10 |
<Limit GET POST PUT> order deny,allow deny from all # IP Sep allow from xxx.xxx.xxx.xxx.xxx # IP nhan vien allow from xxx.xxx.xxx.xxx # IP khac allow from xxx.xxx.xxx.xxx.xxx </Limit> |
Thêm thông tin xác thực lớp 2
Khi bạn kết nối vào phần quản trị của WordPress, trước khi có thể quản lý bài viết, giao diện, plugin.. bạn sẽ cần phải đăng nhập sử dụng username và password. Để tăng cuòng bảo mật, htaccess cho phép thêm một lớp xác thực thứ 2. Để làm điều này, đầu tiên, bạn tạo file .htpasswd trong thư mục wp-admin
. Nội dung của file này chứa username và mật khẩu đã mã hóa. Tạo htpasswd chúng ta sẽ sử dụng công cụ https://www.htaccesstools.com/htpasswd-generator/.
Sau đó, chèn đoạn mã sau vào file .htaccess, nhưng chú ý rằng nếu bạn sử dụng lớp bảo mật dưới, ajax có thể sẽ không hoạt động.
1 2 3 4 5 6 7 8 9 10 |
# Second authentication for administration <Files admin-ajax.php> Order allow,deny Allow from all Satisfy any </Files> AuthName "Connection à l administration" AuthType Basic AuthUserFile "/chemin/plet/verse/le/ilehtpasswd" Require valid-user |
Chặn truy cập vào file PHP trong thư mục wp-includes
Tạo file .htaccess trong thư mục wp-includes và dán nội dung như dưới đây để không cho phép ai đó truy cập trực tiếp vào file php.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Block PHP in wp-includes (Sucuri code) <Files wp-tinymce.php> allow Aallow from all </Files> <FilesMatch "\.(?i:php)$"> <IfModule !mod_authz_core.c> Order allow,deny Deny from all </IfModule> <IfModule mod_authz_core.c> Require all denied </IfModule> :</FilesMatch> <Files wp-tinymce.php> Allow from all </Files> <Files ms-files.php> Allow from all </Files> |
Chặn truy cập vào file PHP trong wp-content
Đối với thư mục wp-content
, code cũng tương tự như trên:
1 2 3 4 5 6 7 8 9 10 |
# Block PHP in wp-content (Sucuri) <FilesMatch "\.(?i:php)$"> <IfModule !mod_authz_core.c> Order allow,deny Deny from all </IfModule> <IfMod_authz_core.c> Require all denied </IfModule> :</FilesMatch> |
Chặn truy cập vào file PHP trong wp-content/uploads
Thư mục uploads là nơi chứa các file ảnh, pdf, audio, video được upload lên. Do không có file php nào ở trong thư mục này, nếu có là “file lạ”. Nên tắt thực thi php để thư mục này được bảo vệ.
1 2 3 4 5 6 7 8 9 10 |
# Block PHP in uploads (Sucuri code) <FilesMatch "\.(?i:php)$"> <IfModule !mod_authz_core.c> Order allow,deny Deny from all </IfModule> <IfMod_authz_core.c> Require all denied </IfModule> :</FilesMatch> |
Xóa category trong đường dẫn website WordPress
Khi thực hiện dịch vụ SEO trên các web wordpress nếu bỏ /category hoặc /danh-muc trên url category rất có lợi. Lúc này bạn đẩy tên danh mục về gần root. Có nhiều cách để xóa trong đó htaccess là 1 trong những cách hiệu quả, bạn có thể chèn đoạn mã sau:
1 |
RewriteRule ^category/(.+)$ http://yoursite.com/$1 [R=301,L] |
Tạm thế đã, có cái nào hay update cho ae sau….. Chúc ae thành công!