Tan Phat Media

.htaccess Generator - Tạo File .htaccess Online

Tạo file .htaccess cho Apache server

Cấu hình

Redirect HTTP to HTTPS

Redirect www to non-www

Redirect non-www to www

Generated .htaccess
# Generated by Tấn Phát Digital .htaccess Generator

# Force HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Remove WWW
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

# Default Index Files
DirectoryIndex index.php index.html

# Custom Error Pages
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html

# Gzip Compression
<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
  AddOutputFilterByType DEFLATE application/javascript application/x-javascript application/json
  AddOutputFilterByType DEFLATE application/xml application/xhtml+xml application/rss+xml
  AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>

# Browser Caching
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/jpg "access plus 1 year"
  ExpiresByType image/jpeg "access plus 1 year"
  ExpiresByType image/gif "access plus 1 year"
  ExpiresByType image/png "access plus 1 year"
  ExpiresByType image/webp "access plus 1 year"
  ExpiresByType image/svg+xml "access plus 1 year"
  ExpiresByType image/x-icon "access plus 1 year"
  ExpiresByType text/css "access plus 1 month"
  ExpiresByType text/javascript "access plus 1 month"
  ExpiresByType application/javascript "access plus 1 month"
  ExpiresByType application/pdf "access plus 1 month"
  ExpiresByType font/woff "access plus 1 year"
  ExpiresByType font/woff2 "access plus 1 year"
</IfModule>

# Security Headers
<IfModule mod_headers.c>
  Header set X-Content-Type-Options "nosniff"
  Header set X-Frame-Options "SAMEORIGIN"
  Header set X-XSS-Protection "1; mode=block"
  Header set Referrer-Policy "strict-origin-when-cross-origin"
  Header set Permissions-Policy "geolocation=(), microphone=(), camera=()"
</IfModule>

# Prevent Directory Listing
Options -Indexes

# Block Bad Bots
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (AhrefsBot|SemrushBot|MJ12bot|DotBot|BLEXBot) [NC]
RewriteRule .* - [F,L]

# Block XML-RPC (WordPress)
<Files xmlrpc.php>
  Order Deny,Allow
  Deny from all
</Files>

# Block wp-config.php
<Files wp-config.php>
  Order Deny,Allow
  Deny from all
</Files>

# Custom Redirects
Redirect 301 /old-page /new-page

Hợp tác ngay với Tấn Phát Digital

Chúng tôi không chỉ thiết kế website, mà còn giúp doanh nghiệp xây dựng thương hiệu số mạnh mẽ. Cung cấp dịch vụ thiết kế website trọn gói từ thiết kế đến tối ưu SEO. Hãy liên hệ ngay với Tấn Phát Digital để cùng tạo nên những giải pháp công nghệ đột phá, hiệu quả và bền vững cho doanh nghiệp của bạn tại Hồ Chí Minh.

Tạo tệp .htaccess cho Apache: ép HTTPS, xử lý www, nén, cache và chặn truy cập

Công cụ ghép sẵn các khối quy tắc .htaccess thường dùng nhất trên máy chủ Apache từ một bảng công tắc bật tắt, kèm danh sách chuyển hướng 301 hoặc 302 tự thêm. Nội dung tệp hiện ngay bên phải theo từng thay đổi, có nút chép và nút tải về đúng tên .htaccess để đưa lên thư mục gốc của hosting.

Tính năng nổi bật

  • Công tắc ép HTTPS sinh cặp RewriteCond và RewriteRule đưa mọi yêu cầu HTTP sang HTTPS bằng mã 301
  • Hai công tắc www loại trừ lẫn nhau, bật cái này thì cái kia tự tắt để tránh vòng lặp chuyển hướng
  • Ô đặt danh sách tệp mặc định của thư mục và ô đặt trang lỗi 404 tùy chỉnh
  • Khối nén bằng mod_deflate cho HTML, CSS, JavaScript, JSON, XML và ảnh SVG
  • Khối cache trình duyệt bằng mod_expires với thời hạn một năm cho ảnh và font, một tháng cho CSS, JS và PDF
  • Năm header bảo mật gồm cả Permissions-Policy tắt quyền định vị, micro và máy ảnh
  • Nhóm bảo mật WordPress: chặn xmlrpc.php, chặn wp-config.php, tắt liệt kê thư mục và chặn nhóm bot thu thập dữ liệu SEO
  • Chống nhúng ảnh từ tên miền khác và bảng thêm chuyển hướng 301 hoặc 302 không giới hạn số dòng

Vì sao nên dựng sẵn tệp rồi mới tải lên hosting

Tệp .htaccess có một đặc điểm khiến nó nguy hiểm hơn hầu hết tệp cấu hình khác: nó có hiệu lực ngay khi được lưu, không cần khởi động lại dịch vụ, và một dòng sai cú pháp làm toàn bộ thư mục cùng mọi thư mục con trả về lỗi 500 chứ không chỉ hỏng riêng quy tắc đó. Với hosting chia sẻ, bạn thường không xem được log lỗi của Apache nên màn hình chỉ hiện một trang trắng kèm mã 500 mà không nói dòng nào sai. Thêm nữa, phần lớn nội dung .htaccess là các mẫu chép qua chép lại từ diễn đàn, trong đó lẫn cả cú pháp của Apache bản cũ, cả quy tắc viết cho cấu hình khác, và chép nhầm thì hậu quả là mất luôn website. Dựng tệp bằng bảng công tắc giúp bạn thấy trước toàn bộ nội dung, biết chính xác mình bật những gì, và nếu sau này site có sự cố thì cũng dễ tắt từng khối để khoanh vùng. Đây cũng là cách nhanh nhất để có một tệp nền sạch cho site mới, thay vì kế thừa một tệp đã bị nhiều người sửa chồng lên nhau qua nhiều năm.

Lợi ích khi sử dụng

  • Thấy trước toàn bộ nội dung tệp nên biết chính xác mình đang bật những gì, không chép nhầm mẫu trên mạng
  • Hai công tắc www tự loại trừ nhau nên tránh được lỗi vòng lặp chuyển hướng thường gặp nhất
  • Mỗi khối đều có dòng chú thích riêng, sau này cần tắt thử để tìm lỗi thì biết ngay xóa đoạn nào
  • Khối nén và khối cache bọc trong IfModule nên hosting thiếu mô đun cũng không làm hỏng site
  • Dùng được cho cả hosting chia sẻ không có quyền quản trị, chỉ cần trình quản lý tệp hoặc FTP

Cách tạo tệp .htaccess bằng công cụ này

  1. 1Ở thẻ Basic, bật ép HTTPS nếu site đã có chứng chỉ, rồi chọn một trong hai hướng www và điền trang lỗi 404 nếu bạn có sẵn tệp đó.
  2. 2Sang thẻ Perf, bật nén và cache trình duyệt, đây là hai khối cho hiệu quả rõ nhất với điểm tốc độ trang mà lại ít rủi ro nhất.
  3. 3Sang thẻ Security, bật nhóm header bảo mật, tắt liệt kê thư mục, và chỉ bật nhóm chặn WordPress nếu site của bạn thật sự chạy WordPress.
  4. 4Nếu muốn chặn nhúng ảnh, bật công tắc tương ứng rồi nhập tên miền của bạn vào ô bên dưới, bỏ trống thì khối này không được sinh ra.
  5. 5Sang thẻ Redirects để thêm từng cặp đường dẫn cũ và mới, bấm Download rồi tải tệp lên thư mục gốc của hosting, mở lại website kiểm tra ngay.

Thứ tự các khối trong tệp và vì sao thứ tự đó quan trọng

Tệp sinh ra bắt đầu bằng một dòng chú thích ghi nguồn, sau đó lần lượt tới khối ép HTTPS, khối xử lý www, dòng đặt tệp mặc định của thư mục, các dòng trang lỗi, khối nén, khối cache, khối header bảo mật, dòng tắt liệt kê thư mục, khối chặn bot, khối chống nhúng ảnh, hai khối chặn tệp WordPress, và cuối cùng là danh sách chuyển hướng. Thứ tự này không ngẫu nhiên. Các quy tắc viết lại địa chỉ được xử lý từ trên xuống, nên chuyển hướng giao thức và chuyển hướng tên miền phải đứng trước mọi quy tắc khác, nếu không khách sẽ đi qua một quy tắc nội bộ rồi mới bị đẩy sang HTTPS, tức là mất thêm một lượt chuyển hướng cho mỗi lần truy cập. Một điểm cần biết nữa là công cụ lặp lại dòng bật động cơ viết lại ở đầu mỗi khối có dùng tới nó. Việc lặp này vô hại vì Apache chấp nhận khai báo nhiều lần, nhưng nếu bạn muốn tệp gọn hơn thì có thể xóa bớt và chỉ giữ đúng một dòng ở đầu tệp. Danh sách chuyển hướng nằm cuối cùng và dùng directive của mô đun chuyển hướng chứ không phải quy tắc viết lại, nên nó được xử lý ở một pha khác và không tranh chấp với các khối bên trên.

Cú pháp chặn truy cập của Apache 2.2 và 2.4: chỗ dễ gây lỗi 500 nhất trong tệp này

Hai khối chặn tệp WordPress dùng cú pháp Order Deny,Allow kèm Deny from all. Đây là cú pháp của mô đun kiểm soát truy cập bản Apache 2.2, đã bị thay thế từ bản 2.4 bằng một dòng duy nhất là Require all denied. Trên phần lớn hosting hiện nay, cú pháp cũ vẫn chạy vì Apache 2.4 mặc định bật mô đun tương thích ngược, nhưng có những máy chủ tắt mô đun này để chạy gọn, và khi đó tệp của bạn sẽ làm cả site trả về lỗi 500 ngay lúc tải lên. Triệu chứng đặc trưng là site chết ngay sau khi bật hai công tắc chặn WordPress, còn tắt hai công tắc đó thì site sống lại. Cách xử lý mất khoảng ba mươi giây: mở tệp sau khi tải về, thay hai dòng Order và Deny bằng đúng một dòng Require all denied trong mỗi khối Files. Nếu bạn không chắc máy chủ chạy phiên bản nào, hãy dùng luôn cú pháp mới vì Apache 2.4 ra mắt đã hơn mười năm và gần như không còn hosting nào chạy bản 2.2. Ngược lại, nếu bạn buộc phải làm việc với một máy chủ rất cũ thì giữ nguyên cú pháp mà công cụ sinh ra.

Ghép tệp với khối quy tắc sẵn có của WordPress mà không mất đường dẫn thân thiện

WordPress tự ghi vào .htaccess một khối nằm giữa hai dòng đánh dấu bắt đầu và kết thúc, bên trong là quy tắc đưa mọi địa chỉ không khớp tệp thật về index.php. Khối này là thứ làm cho đường dẫn thân thiện hoạt động. Nếu bạn tải tệp từ công cụ này lên và ghi đè toàn bộ, khối đó biến mất, trang chủ vẫn mở được nhưng mọi bài viết và chuyên mục trả về lỗi 404, một triệu chứng khiến nhiều người tưởng cơ sở dữ liệu hỏng. Cách ghép đúng là mở tệp .htaccess đang có trên hosting, chép phần nội dung mà công cụ sinh ra và dán vào phía trên dòng đánh dấu bắt đầu của WordPress, giữ nguyên toàn bộ khối của WordPress ở dưới. Đặt lên trên là có lý do: quy tắc ép HTTPS và quy tắc www cần chạy trước khi yêu cầu bị chuyển vào index.php. Đừng dán vào giữa hai dòng đánh dấu, vì WordPress có thể ghi đè vùng đó mỗi khi bạn lưu lại cài đặt đường dẫn tĩnh, và phần bạn thêm sẽ mất không dấu vết. Sau khi ghép xong, hãy vào phần cài đặt đường dẫn tĩnh trong trang quản trị rồi bấm lưu một lần để WordPress tự kiểm tra lại khối của nó.

Cùng cấu hình web server nhưng .htaccess phân tán còn Nginx tập trung

Tệp mà trang này sinh ra chỉ có tác dụng trên Apache, và cũng chỉ khi cấu hình máy chủ cho phép tệp trong thư mục ghi đè cấu hình chính. Cơ chế của nó là phân tán: mỗi thư mục có thể có một tệp riêng, quy tắc ở thư mục con ghi đè quy tắc ở thư mục cha, và với mỗi yêu cầu Apache phải quét ngược từ thư mục chứa tệp được yêu cầu lên tới thư mục gốc để gom hết các tệp gặp trên đường. Đổi lại sự tiện lợi đó, bạn trả giá bằng một loạt thao tác đọc đĩa cho mỗi lượt truy cập, kể cả khi trong các thư mục ấy không có tệp nào. Nginx đi hướng ngược lại: nó không có khái niệm tệp cấu hình theo thư mục, toàn bộ quy tắc nằm trong khối server được đọc đúng một lần lúc reload, và muốn sửa thì phải có quyền vào máy chủ. Cú pháp cũng khác hẳn nên không chuyển thẳng qua lại được: chỗ Apache dùng RewriteCond kèm RewriteRule thì Nginx dùng location với try_files hoặc return, chỗ Apache dùng ExpiresByType theo từng kiểu nội dung thì Nginx dùng một location biểu thức chính quy bắt theo phần mở rộng tệp. Nếu bạn đang chạy VPS với Nginx, hãy dùng công cụ tạo cấu hình Nginx tại /vi/tools/nginx-config-generator, tệp .htaccess đặt lên đó sẽ bị bỏ qua hoàn toàn mà không báo lỗi gì.

Cái giá về tốc độ của .htaccess và khi nào nên chuyển quy tắc vào cấu hình chính

Vì Apache phải kiểm tra tệp .htaccess ở mọi cấp thư mục cho từng yêu cầu, một website có cây thư mục sâu sẽ tốn thêm nhiều lượt kiểm tra đĩa chỉ để biết rằng ở đó không có tệp nào. Với một trang có vài chục tài nguyên tĩnh, con số này nhân lên đáng kể. Ngoài ra, nội dung tệp không được lưu vào bộ nhớ đệm giữa các yêu cầu nên Apache phân tích lại từ đầu mỗi lần. Nếu bạn có quyền quản trị máy chủ, cách tối ưu là tắt hẳn khả năng ghi đè theo thư mục rồi chuyển toàn bộ quy tắc vào khối cấu hình của tên miền trong cấu hình chính: nội dung y hệt, chỉ khác chỗ đặt, và Apache đọc một lần lúc khởi động. Khi đó bạn vẫn dùng được tệp mà công cụ này sinh ra, chỉ việc chép nội dung vào giữa khối Directory tương ứng. Còn nếu bạn thuê hosting chia sẻ thì không có lựa chọn nào khác ngoài .htaccess, và trong trường hợp đó hãy giữ tệp càng gọn càng tốt: tắt các khối không dùng, không để lại quy tắc thử nghiệm, và gộp các chuyển hướng cũ thành ít dòng nhất có thể thay vì để tích tụ hàng trăm dòng qua nhiều năm.

Câu hỏi thường gặp (FAQ)

Tải tệp lên xong website trả về lỗi 500, xử lý theo thứ tự nào?

Đổi tên tệp thành .htaccess-bak để site sống lại trước, rồi bật lại từng khối một cho tới khi lỗi tái hiện. Nghi ngờ đầu tiên nên đặt vào hai khối chặn tệp WordPress vì chúng dùng cú pháp Order Deny,Allow của Apache bản cũ, thay bằng dòng Require all denied là hết lỗi trên đa số máy chủ hiện nay.

Tải tệp về nhưng máy tính không hiện, hoặc tên tệp bị sai?

Tệp bắt đầu bằng dấu chấm nên hệ điều hành coi là tệp ẩn, bạn cần bật hiển thị tệp ẩn trong trình quản lý tệp. Ngoài ra hãy kiểm tra tên không bị thêm đuôi .txt khi lưu, tệp phải đúng là .htaccess không có phần mở rộng nào phía sau thì Apache mới đọc.

Tôi bật xử lý www nhưng site chưa có chứng chỉ, có sao không?

Có. Cả hai quy tắc www trong công cụ đều viết đích đến bắt đầu bằng https, nên khi site chưa có chứng chỉ hợp lệ, khách bấm vào sẽ gặp cảnh báo không an toàn hoặc không mở được trang. Hãy cài chứng chỉ trước, hoặc sửa tay chữ https thành http trong hai dòng đó cho tới khi có chứng chỉ.

Tệp không có tác dụng gì cả, không lỗi cũng không thấy đổi?

Nhiều khả năng cấu hình máy chủ đặt AllowOverride thành None cho thư mục đó, khiến Apache bỏ qua toàn bộ tệp trong thư mục. Trên hosting chia sẻ hãy hỏi nhà cung cấp, trên máy chủ riêng thì sửa AllowOverride thành All trong khối Directory rồi khởi động lại Apache.

Vì sao bật cả hai công tắc www cùng lúc không được?

Vì hai công tắc được lập trình loại trừ nhau, bật cái này thì cái kia tự tắt. Đó là chủ ý: nếu tệp cùng lúc có quy tắc đẩy về www và quy tắc đẩy về không www, trình duyệt sẽ chuyển hướng qua lại cho tới khi báo lỗi lặp vô hạn và website không mở được.

Bảng chuyển hướng dùng Redirect chứ không phải RewriteRule, khác gì nhau?

Redirect thuộc mô đun chuyển hướng, so khớp theo tiền tố đường dẫn và không hiểu biểu thức chính quy, đổi lại viết rất ngắn gọn. RewriteRule mạnh hơn vì so khớp bằng biểu thức chính quy và đặt được điều kiện, nhưng cú pháp rườm rà hơn. Với chuyển hướng từng địa chỉ cụ thể thì Redirect là đủ.

Chặn nhóm bot thu thập dữ liệu SEO có làm Google bỏ qua site không?

Không. Danh sách chặn gồm các bot của công cụ phân tích liên kết bên thứ ba, không có bot của công cụ tìm kiếm nên việc lập chỉ mục không bị ảnh hưởng. Nhưng nếu chính bạn đang dùng các công cụ đó để tự kiểm tra website của mình thì báo cáo sẽ trống, khi ấy hãy tắt công tắc này.

Bật chống nhúng ảnh mà khối đó không xuất hiện trong tệp?

Vì khối này chỉ được sinh ra khi bạn đã nhập tên miền vào ô bên dưới công tắc. Bỏ trống thì công cụ bỏ qua để tránh sinh ra quy tắc chặn chính website của bạn. Hãy nhập tên miền không kèm giao thức, phần www đã được xử lý sẵn trong quy tắc.

Hosting của tôi không bật mô đun nén hoặc mô đun cache thì sao?

Không sao cả. Hai khối này được bọc trong thẻ IfModule nên khi mô đun tương ứng vắng mặt, Apache bỏ qua phần bên trong thay vì báo lỗi. Bạn chỉ đơn giản là không nhận được lợi ích, website vẫn chạy bình thường. Muốn có nén thì liên hệ nhà cung cấp hosting để yêu cầu bật mô đun.

Đặt thời hạn cache một năm cho ảnh có làm khách thấy bản cũ mãi không?

Có, nếu bạn thay ảnh mà giữ nguyên tên tệp thì khách đã từng truy cập sẽ còn thấy bản cũ cho tới khi bộ nhớ đệm hết hạn. Cách xử lý chuẩn là đổi tên tệp khi thay nội dung, ví dụ thêm số phiên bản vào tên, để địa chỉ mới buộc trình duyệt tải lại.

Có thể đặt tệp .htaccess ở thư mục con không?

Được, và đó là điểm mạnh của cơ chế này. Quy tắc ở thư mục con ghi đè quy tắc cùng loại ở thư mục cha, nên bạn có thể chặn liệt kê riêng một thư mục hoặc đặt trang lỗi riêng cho một khu vực. Đổi lại càng nhiều tệp rải rác thì càng khó lần ra nguồn gốc khi có sự cố.

Chặn xmlrpc.php có làm hỏng ứng dụng WordPress trên điện thoại không?

Có thể. Ứng dụng WordPress chính thức trên điện thoại và một số dịch vụ đăng bài từ xa vẫn dùng tệp này để kết nối. Nếu bạn chỉ quản trị qua trình duyệt thì cứ chặn, đây là cách giảm đáng kể lượng thử đăng nhập tự động. Còn nếu bạn dùng ứng dụng di động thì hãy tắt công tắc đó.

Từ khóa liên quan

  • htaccess generator
  • tạo file htaccess online
  • htaccess ép https
  • htaccess chuyển hướng 301
  • htaccess xóa www
  • htaccess chặn bot
  • htaccess bảo mật wordpress
  • chặn xmlrpc php
  • htaccess lỗi 500 internal server error
  • htaccess gzip mod_deflate
  • htaccess cache mod_expires
  • htaccess chống hotlink ảnh
  • options -indexes tắt liệt kê thư mục
  • allowoverride all là gì
  • order deny allow require all denied
  • htaccess trang lỗi 404 tùy chỉnh
  • htaccess thư mục con
  • cấu hình apache cho hosting chia sẻ

Công cụ Developer Tools liên quan

.env Generator

Tạo file .env và .env.example cho dự án.

.gitignore Generator

Tạo .gitignore cho Node.js, Python, Java.

API Mock Generator

Tạo mock JSON data cho API testing.

API Response Formatter

Format và phân tích API response.

API Tester

Test REST API: GET, POST, PUT, DELETE.

Postman Alternative - API Testing Tool Online với Collections, Environment & File Upload

Postman Alternative miễn phí - Test APIs với Collections, Multiple Environments, Pre-request Scripts, Collection Runner, File Upload (form-data), Tests/Assertions, Code Generation (cURL, JS, Python, Node.js). Browser-based, không cần cài đặt. Save requests, export/import collections, auto-save history. Hỗ trợ Bearer Token, Basic Auth, API Key. Hoàn hảo cho API development và testing.

Swagger API Tester - Test API với OpenAPI/Swagger Spec & Authentication Online

Swagger API Tester miễn phí - Import OpenAPI/Swagger specification và test API endpoints với đầy đủ authentication (Bearer Token/JWT, Basic Auth, API Key). Hỗ trợ OpenAPI 3.0, Swagger 2.0, auto-parse endpoints, parameters, request body. Giao diện như Swagger UI với color-coded methods, grouped endpoints, real-time testing. Hoàn hảo cho API development, testing, debugging secured APIs.

Base Converter

Chuyển đổi Binary, Hex, Base32.

Base64 Encoder

Mã hóa/giải mã Base64.

Binary Converter

Chuyển đổi Decimal, Binary, Hex.

Box Shadow Generator

Tạo CSS box-shadow trực quan.

Chmod Calculator

Tính quyền file Linux.

Dịch vụ của Tấn Phát Digital

Đang xây sản phẩm và cần thêm người làm phần nặng?

Gói giải pháp doanh nghiệp

Nền tảng custom cho ngân hàng, y tế và sàn B2B, chuẩn ISO 27001, GDPR, PCI-DSS, SLA 99.99%.

Từ 50.000.000đXem chi tiết →

Dịch vụ phát triển Blockchain & Web3

Smart contract, dApp và NFT marketplace đa chuỗi, audit bảo mật đầy đủ trước khi lên mainnet.

Từ 50.000.000đXem chi tiết →

Dịch vụ thiết kế website tại Hồ Chí Minh

Website doanh nghiệp, bán hàng và đặt lịch, chuẩn SEO ngay từ cấu trúc, tốc độ tải dưới 3 giây.

Từ 5.000.000đXem chi tiết →

Dịch vụ thiết kế landing page

Trang đích riêng cho từng chiến dịch quảng cáo, tỷ lệ chuyển đổi 3–8%, bàn giao trong 5–21 ngày.

Từ 3.000.000đXem chi tiết →

Tư vấn và báo giá miễn phí trong 24 giờ. Xem toàn bộ dịch vụ

Zalo
Facebook
Tấn Phát Digital
Zalo
Facebook