Các web server Apache dùng file .htaccess
để tùy chỉnh chi tiết website mà không cần sửa đổi các file cấu hình chính của server. Tên file này bắt đầu bằng một dấu chấm, đồng nghĩa nó là một file ẩn.
File .htaccess
có thể được dùng để load các trang lỗi tùy chỉnh (như trang 404), chuyển hướng URL, thiết lập xác thực bằng mật khẩu cho các thư mục cụ thể trên server, và nhiều công dụng khác.
Trong bài hướng dẫn này, chúng ta sẽ tìm hiểu cách kích hoạt, tạo và sử dụng file .htaccess
, cũng như một số công dụng phổ biến và những ảnh hưởng của nó đến tốc độ và bảo mật của server.
Chuẩn bị
Để có thể thực hành sử dụng file .htaccess
qua các ví dụ trong bài này, bạn sẽ cần:
- Một server Ubuntu 20.04 đã kích hoạt firewall với một user thường có quyền
sudo
. - Cài đặt web server Apache trên server Ubuntu trên. Đảm bảo bạn đã có sẵn file virtual host (máy chủ ảo) cho domain của mình. Trong bài này, ta sẽ sử dụng your_domain làm ví dụ xuyên suốt và file virtual host sẽ là
your_domain.conf
. - Nếu muốn thực hành với domain thật (không bắt buộc), bạn có thể mua chúng trên Namecheap, nhận miễn phí từ Freenom, hoặc sử dụng một nhà cung cấp tên miền nào khác tùy chọn. Bạn cũng sẽ cần thiết lập cả hai record (bản ghi) DNS sau cho server: hai record A, một với
your_domain
và một vớiwww.your_domain
. Chúng phải cùng trỏ đến địa chỉ IP công khai của server. - Nếu muốn bảo mật virtual host của mình, bạn có thể sử dụng trusted certificate (chứng chỉ tin cậy) miễn phí từ Let’s Encrypt. Tuy nhiên, nếu không có domain, bạn có thể dùng chứng chỉ tự ký (self-signed certificate). Loại chứng chỉ này cũng cung cấp cơ cấu mã hóa tương tự nhưng chúng không có xác thực domain.
Sau khi hoàn tất các bước chuẩn bị này, hãy bắt đầu học cách kích hoạt và tạo file .htaccess
trong các phần tiếp theo.
Kích hoạt file .htaccess
Nếu có quyền truy cập vào cấu hình server, bạn có thể chỉnh sửa file cấu hình của Apache để cho phép file .htaccess
ghi đè các cấu hình website mặc định.
Đầu tiên, hãy mở file virtual host your_domain.conf
bằng editor yêu thích của bạn. Trong ví dụ này, ta sẽ dùng nano
:
sudo nano /etc/apache2/sites-available/your_domain.conf
Nếu bạn đã cài đặt Apache cho domain của mình, file này sẽ có nội dung như sau:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName your_domain
ServerAlias www.your_domain
DocumentRoot /var/www/your_domain
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Hãy thêm khối <Directory>
sau vào bên trong khối <VirtualHost>
:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName your_domain
ServerAlias www.your_domain
DocumentRoot /var/www/your_domain
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/your_domain>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Dòng quan trọng nhất trong khối <Directory>
này là AllowOverride All
. Nó có tác dụng cho phép sử dụng file .htaccess
. Sau khi thêm xong, hãy lưu và đóng file. Nếu dùng nano
, bạn có thể thực hiện bằng cách nhấn CTRL + X
, rồi Y
và ENTER
.
Tiếp theo, khởi động lại Apache:
sudo service apache2 restart
Tạo file .htaccess
Để làm điều này trong terminal, bạn cần di chuyển đến thư mục gốc web (web root directory) của mình. Đây là nơi bạn nên đặt file .htaccess
để cho các cấu hình trong đó được áp dụng đúng cho website.
Vị trí này rất quan trọng, vì các cấu hình trong đó sẽ ảnh hưởng đến tất cả nội dung trong thư mục chứa nó, kể cả các thư mục con bên trong. Do đó, nếu bạn host nhiều website khác nhau trên cùng một server Apache, mỗi file .htaccess
nên được đặt trong thư mục gốc web riêng của từng website.
Nếu bạn đã làm theo các bước chuẩn bị, thư mục gốc web của bạn sẽ là /var/www/your_domain
. Để tạo file .htaccess
cho website, hãy chạy lệnh sau:
sudo nano /var/www/your_domain/.htaccess
Tiếp theo, tiếp theo chúng ta sẽ tìm hiểu một số công dụng phổ biến của file này.
Các công dụng phổ biến của file .htaccess
Có năm công dụng phổ biến của file .htaccess
cho website của bạn:
Mod_Rewrite
Một trong những tính năng hữu ích nhất của file .htaccess
là Mod_Rewrite
. Bạn có thể dùng file này để tùy chỉnh cách các URL và trang web hiển thị với người dùng.
Xác thực
Bạn có thể tạo một file mật khẩu tên là .htpasswd
cùng với .htaccess
để xác thực người dùng. Nó sẽ kích hoạt một cổng xác thực và nhắc người dùng nhập mật khẩu nếu họ muốn truy cập vào các phần nhất định của website. Vì lý do bảo mật, khi tạo file này, hãy đảm bảo lưu nó ở một vị trí khác ngoài thư mục web.
Để tạo file này, hãy chạy lệnh htpasswd
với tùy chọn -c
, theo sau là đường dẫn đến file .htpasswd
mong muốn và tên người dùng. Sau đó, nhập mật khẩu khi được yêu cầu.
Bạn có thể thêm nhiều người dùng vào file .htpasswd
nếu cần, chỉ cần mỗi user nằm riêng ở một dòng. Ví dụ sau minh họa cách tạo một mục mới trong file cho người dùng có tên là sammy:
sudo htpasswd -c /etc/apache2/.htpasswd sammy
Bạn có thể kiểm tra nội dung của file trên bằng cách chạy lệnh cat /etc/apache2/.htpasswd
. Lệnh này sẽ hiển thị tên người dùng và mật khẩu đã mã hóa cho mỗi tài khoản đã thêm.
Sau khi đã thêm các người dùng mong muốn, tiếp theo hãy mở file .htaccess
đã tạo ở bước trên:
sudo nano /var/www/your_domain/.htaccess
Lưu ý rằng trong ví dụ này, chúng ta đang giới hạn quyền truy cập vào toàn bộ thư mục gốc (document root) của /var/www/your_domain
. Bạn có thể đặt cấu hình này trong bất kỳ thư mục nào muốn hạn chế truy cập.
Sau khi mở file, hãy thêm nội dung sau và lưu lại để kích hoạt chức năng bảo vệ bằng mật khẩu:
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
Tạo các trang lỗi tùy chỉnh
File .htaccess
cũng cho phép bạn tạo các trang lỗi tùy chỉnh cho website của bạn. Một số lỗi phổ biến nhất bao gồm:
- 400 Bad Request (Yêu cầu không hợp lệ)
- 401 Authorization Required (Yêu cầu xác thực)
- 403 Forbidden Page (Trang bị cấm truy cập)
- 404 File not Found (Không tìm thấy file)
- 500 Internal Server Error (Lỗi máy chủ nội bộ)
Để trang web cung cấp nhiều thông tin hữu ích cho người truy cập hơn là các trang báo lỗi mặc định của server, bạn có thể dùng file .htaccess
để tùy chỉnh chúng.
Kiểu MIME
Trong trường hợp website của bạn chứa một số loại file mà server chưa có khả năng phục vụ, bạn có thể thêm các kiểu MIME (Multipurpose Internet Mail Extensions, hay là kiểu phương tiện) vào server Apache thông qua file .htaccess
bằng đoạn sau:
AddType audio/mp4a-latm .m4a
Hãy nhớ thay thế kiểu ứng dụng và phần mở rộng file cho phù hợp với kiểu MIME bạn muốn hỗ trợ. Trong ví dụ trên, chúng ta đã chỉ định một kiểu MIME cho file âm thanh.
SSI
SSI (Server Side Includes, các mã chèn từ phía server) là một công cụ có thể giúp bạn tiết kiệm rất nhiều thời gian khi quản lý website. Một trong những ứng dụng phổ biến nhất của SSI là cập nhật dữ liệu chung cho hàng loạt trang mà không cần phải sửa đổi từng trang riêng lẻ. Một ví dụ điển hình là việc thay đổi một câu trích dẫn ở cuối mỗi trang.
Để kích hoạt SSI, hãy thêm đoạn sau vào file .htaccess
:
AddType text/html .shtml
AddHandler server-parsed .shtml</pre>
Các dòng này khai báo với Apache rằng các file .shtml
được chấp nhận hợp lệ. Trong đó dòng thứ hai yêu cầu server quét tất cả các file có đuôi .shtml
để tìm và thực thi các lệnh SSI.
Tuy nhiên, nếu có nhiều trang HTML mà bạn không muốn đổi đuôi thành .shtml
, bạn có thể dùng một kỹ thuật khác là XBitHack
để làm server vẫn xử lý các lệnh SSI trong đó.
Để sử dụng cách này, hãy thêm dòng sau vào file .htaccess
để Apache kiểm tra và xử lý SSI cho tất cả các file .html
có quyền phù hợp cho XBitHack
:
XBitHack on
Để cho phép một trang HTML sử dụng XBitHack
, hãy dùng lệnh chmod
để cấp quyền thực thi cho file đó:
chmod +x pagename.html
Tốc độ và bảo mật với file .htaccess
Mặc dù file .htaccess
có thể thêm một tính năng của một website, có hai khía cạnh quan trọng khác mà ta phải lưu tâm là tốc độ và bảo mật.
Về mặt hiệu năng, file .htaccess
có thể làm chậm server của bạn. Tuy nhiên với hầu hết các server, sự sụt giảm hiệu năng này thường không đáng kể. Lý do là vì mỗi khi có một request gửi đến trang web, server Apache sẽ phải kiểm tra thư mục chứa trang đó và tất cả các thư mục cha của nó (theo hướng lên trên) để tìm và áp dụng các chỉ thị từ file .htaccess
.
Quá trình này lặp lại cho đến thư mục gốc của website hoặc tới khi mà AllowOverride
không còn cho phép, ngay cả khi các file .htaccess
đó không tồn tại.
Về mặt bảo mật, ta dễ truy cập và sửa đổi file .htaccess
hơn so với file cấu hình chính của Apache. Các thay đổi trong đó cũng có hiệu lực ngay lập tức mà không cần khởi động lại server. Việc cho phép người dùng sửa đổi file .htaccess
, đồng nghĩa với việc trao cho họ quyền kiểm soát đáng kể đối với hoạt động của server.
Mọi chỉ thị đặt trong file .htaccess
đều có hiệu lực tương tự như khi chúng được đặt trong file cấu hình chính của Apache. Do đó, chính phía Apache cũng thường khuyến cáo rằng, nếu bạn có quyền truy cập vào file cấu hình server chính, hãy nên đặt các cấu hình của bạn ở đó thay vì sử dụng file .htaccess
.
Kết luận
File .htaccess
cung cấp nhiều tùy chọn linh hoạt để bạn cấu hình và xây dựng website của mình. Để tìm hiểu sâu hơn về cách bảo mật website, bạn có thể tham khảo bài các hướng dẫn về thiết lập xác thực mật khẩu với Apache của chúng tôi. Ngoài ra, bạn cũng nên tìm đọc thêm các bài hướng dẫn cài đặt web server Apache và các file và thư mục quan trọng trong Apache.