Trình tạo .htaccess

Tạo các quy tắc Apache .htaccess cho các cấu hình máy chủ phổ biến.

Không có dữ liệu nào rời khỏi thiết bị của bạn

Bắt buộc HTTPS

Bắt buộc WWW / không WWW

Header bảo mật

Nén GZIP

Cache trình duyệt

Trang lỗi tùy chỉnh

Tùy chọn thư mục

Tệp .htaccess được tạo

Một .htaccess là gì?

Tệp .htaccess là một tệp cấu hình cho các máy chủ web Apache. Nó cho phép xác định các chuyển hướng URL, các header bảo mật, các quy tắc cache và nhiều hơn nữa · mà không sửa đổi cấu hình chính của máy chủ.

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

Đặt tệp .htaccess ở đâu?

Đặt nó trong thư mục gốc của trang web của bạn (thường là public_html hoặc www). Các quy tắc áp dụng cho thư mục này và tất cả các thư mục con của nó.

Nó có hoạt động với Nginx không?

Không. .htaccess là đặc thù cho Apache. Nginx sử dụng cú pháp cấu hình riêng trong nginx.conf hoặc các tệp config của trang.

.htaccess có thể làm chậm trang web của tôi không?

Apache kiểm tra .htaccess ở mỗi yêu cầu, vì vậy các tệp rất lớn có thể thêm chi phí. Đối với các trang web lưu lượng cao, di chuyển các quy tắc sang config Apache chính nhanh hơn.

File .htaccess thực sự là gì

Một tệp .htaccesstệp cấu hình theo thư mục của Apache. Tên này được hiểu rộng rãi là viết tắt của «hypertext access,» phản ánh mục đích sử dụng ban đầu của tệp là hạn chế quyền truy cập vào tài liệu hypertext. Đặt một tệp vào bất kỳ thư mục nào và các chỉ thị sẽ áp dụng cho thư mục đó và mọi thư mục con bên dưới. Tệp không có tên trước dấu chấm (đây là dot-file Unix, ẩn theo mặc định) và phải được đặt tên chính xác là .htaccess (chữ thường, dấu chấm đầu) để Apache tìm thấy nó theo cài đặt AccessFileName mặc định.

Có một chi phí hiệu suất thực sự. Tài liệu của Apache nêu rõ: «nếu AllowOverride được đặt để cho phép sử dụng tệp .htaccess, Apache sẽ tìm kiếm tệp .htaccess trong mọi thư mục. Do đó, việc cho phép tệp .htaccess gây ra tác động đến hiệu suất, dù bạn có thực sự sử dụng chúng hay không.» Cây thư mục được duyệt qua trong mọi yêu cầu HTTP. Đối với một yêu cầu đến /var/www/html/foo/bar/baz.html, Apache kiểm tra stat /.htaccess, rồi /var/.htaccess, rồi /var/www/.htaccess, rồi /var/www/html/.htaccess, v.v., ngay cả khi không có tệp nào tồn tại. Khuyến nghị của Apache là sử dụng khối <Directory> trong cấu hình chính khi có thể (phân tích một lần khi khởi động), và dành .htaccess cho các môi trường hosting mà bạn không có quyền truy cập cấu hình chính.

Khi nào bạn cần nó (và khi nào không)

Apache liệt kê hai trường hợp sử dụng hợp lệ cho .htaccess: nhà cung cấp hosting cho phép người dùng kiểm soát hạn chế mà không cần quyền truy cập cấu hình máy chủ đầy đủ, và các trường hợp mà chỉ thị cần khác nhau giữa các thư mục con nơi người triển khai chỉ kiểm soát hệ thống tệp. Ngoài những trường hợp đó, tài liệu khuyến nghị rõ ràng là di chuyển các quy tắc sang khối <Directory> trong cấu hình chính.

nginx (máy chủ web phổ biến thứ hai) không hỗ trợ .htaccess chút nào; nó cố ý từ chối các tệp cấu hình theo thư mục vì lý do hiệu suất, và tất cả cấu hình nằm trong nginx.conf và các tệp site được đưa vào. Nếu dự án của bạn chạy trên nginx, đầu ra của generator này sẽ không giúp ích, bạn cần các khối server / location trong tệp cấu hình nginx. Caddy dùng cú pháp Caddyfile riêng với HTTPS tự động qua Let's Encrypt làm mặc định. LiteSpeedOpenLiteSpeed hỗ trợ .htaccess để tương thích Apache. IIS dùng web.config.

Viết lại URL và mẫu HTTPS chuẩn

Hầu hết các công việc .htaccess không tầm thường đều dùng mod_rewrite, công cụ viết lại URL dựa trên quy tắc của Apache được xây dựng trên biểu thức chính quy mở rộng POSIX. Cấu trúc cơ bản là RewriteRule pattern substitution [flags], tùy chọn đứng trước một hoặc nhiều điều kiện RewriteCond. Khối force-HTTPS chuẩn:

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

Các cờ [L,R=301] có nghĩa là «đây là quy tắc cuối cùng trong vòng này» và «phản hồi với HTTP 301 Moved Permanently.» 301 là lựa chọn đúng cho chuyển hướng vĩnh viễn, công cụ tìm kiếm truyền link equity và trình duyệt cache tích cực. Chỉ dùng 302 (Found) cho các chuyển hướng thực sự tạm thời, khi bạn không muốn lần di chuyển được cache.

Phía sau load balancer hoặc reverse proxy kết thúc TLS, máy chủ gốc thấy HTTP thuần ngay cả khi trình duyệt của người dùng đang dùng HTTPS, quy tắc RewriteCond %{HTTPS} off ngây thơ khi đó sẽ chuyển hướng mãi mãi. Cách khắc phục là kiểm tra header được chuyển tiếp thay thế: RewriteCond %{HTTP:X-Forwarded-Proto} !https. Chế độ «Flexible SSL» của Cloudflare (CDN nói HTTP đến máy gốc trong khi người dùng dùng HTTPS) là nguyên nhân phổ biến nhất của bẫy redirect-loop này.

Chọn giữa chuẩn hóa www và non-www bằng một mẫu tương tự. Chọn một tên hostname chuẩn cho SEO (tránh vấn đề nội dung trùng lặp) và cho phạm vi cookie (subdomain www mặc định nhận cookie khác với apex).

Nén và bộ nhớ đệm

mod_deflate nén gzip các phản hồi văn bản, giảm đáng kể kích thước truyền tải cho text/HTML/CSS/JS. Bọc khối trong <IfModule mod_deflate.c> để không làm hỏng site trên các máy chủ không tải module. Brotli (mod_brotli) là phiên bản thay thế hiện đại và dùng cùng mẫu.

mod_expires đặt các header ExpiresCache-Control: max-age. Cú pháp «access plus 1 year» được dùng rộng rãi có nghĩa là tài sản có thể được cache trong một năm kể từ khi người dùng tải về. max-age dài là đúng cho tên tệp tài sản có hash (app.abc123.js); max-age ngắn hơn là đúng cho HTML và mọi thứ có thể thay đổi. Để kiểm soát chi tiết hơn, Header set Cache-Control "public, max-age=31536000, immutable" trên các tệp có hash là best practice hiện đại.

Các header bảo mật đáng biết

Ẩn những gì không nên được phục vụ

Hai dòng lệnh bảo mật cứng hóa xứng đáng được áp dụng:

Apache 2.4 thay thế cú pháp Order Allow,Deny cũ bằng họ chỉ thị Require gọn gàng hơn, Require all granted, Require all denied, Require ip 192.0.2.0/24, Require not ip 198.51.100.5. Cú pháp cũ vẫn hoạt động để tương thích ngược nhưng được ghi nhận là deprecated.

Các lỗi thường gặp

Câu Hỏi Thêm

Tệp nên đặt ở đâu chính xác?

Trong thư mục có nội dung bạn muốn kiểm soát. Hầu hết người dùng shared-hosting đặt nó trong document root của site, public_html/, www/, hoặc htdocs/ tùy nhà cung cấp. Apache sau đó duyệt cây thư mục áp dụng các quy tắc cho thư mục đó và mọi thư mục con bên dưới.

301 hay 302, nên dùng chuyển hướng nào?

301 Moved Permanently cho các di chuyển vĩnh viễn. Công cụ tìm kiếm chuyển link equity sang URL mới; trình duyệt cache chuyển hướng tích cực. Dùng cho trường hợp «chúng tôi đã di chuyển trang này vĩnh viễn.» 302 Found cho các chuyển hướng tạm thời, trình duyệt không cache và công cụ tìm kiếm không chuyển xếp hạng. Chỉ dùng 302 khi lần di chuyển thực sự là tạm thời; mặc định dùng 302 thay vì 301 là một trong những sai lầm SEO tự làm hại mình phổ biến nhất.

Làm thế nào để bảo vệ thư mục bằng mật khẩu?

Tạo một tệp .htpasswd với tiện ích dòng lệnh htpasswd (nó lưu các dòng username:bcrypt-hash) và lưu trữ nó bên ngoài web root của bạn. Sau đó trong .htaccess: AuthType Basic, AuthName "Restricted Area", AuthUserFile /full/path/to/.htpasswd, Require valid-user. Trình duyệt hiển thị prompt Basic-auth hệ thống cho bất kỳ ai truy cập thư mục. Đây là mẫu Apache cổ điển; để xác thực nghiêm túc hãy cân nhắc hệ thống đăng nhập cấp ứng dụng.

Điều này có hoạt động trên WordPress không?

WordPress đi kèm khối .htaccess riêng (giữa các marker # BEGIN WordPress# END WordPress) xử lý permalinks. WordPress sẽ ghi đè mọi thứ bên trong các marker đó khi bạn lưu cài đặt permalinks. Thêm các quy tắc của riêng bạn bên ngoài các marker WordPress (thường ở trên chúng) để chúng tồn tại qua quá trình tạo lại tự động.

Có gì được gửi đến máy chủ không?

Không. Generator là JavaScript lắp ráp các khối chỉ thị dựa trên các checkbox của bạn; đầu ra được xây dựng trong trình duyệt của bạn. Không có gì về domain hoặc các tùy chọn đã chọn của bạn rời khỏi trang; công cụ hoạt động ngoại tuyến sau khi đã tải.

Công cụ liên quan