---
title: "Cách sử dụng tệp .htaccess"
description: "Cách sử dụng tệp .htaccess"
url: https://cloudfly.vn/techblog/cach-su-dung-tep-htaccess
image: https://media.cloudfly.vn/posts/techblog_QiWHz7o.jpg
---

# Cách sử dụng tệp .htaccess

## Giới thiệu

Tệp `.htaccess` được sử dụng cho máy chủ web Apache để định cấu hình chi tiết trang web của bạn mà không làm thay đổi tệp cấu hình máy chủ. Tệp này bắt đầu bằng dấu chấm để biểu thị rằng nó bị ẩn trong thư mục. Tệp `.htaccess` có thể được sử dụng để tải các trang lỗi tùy chỉnh (chẳng hạn như trang 404), tạo chuyển hướng URL, triển khai xác thực được bảo vệ bằng mật khẩu cho các thư mục cụ thể trên máy chủ của bạn, v.v.

Trong hướng dẫn này, bạn sẽ tìm hiểu cách kích hoạt, tạo và sử dụng tệp `.htaccess`, cũng như một số cách sử dụng phổ biến và tác động đối với tốc độ và bảo mật.

## Điều kiện tiên quyết

Nếu bạn muốn thực hành sử dụng tệp `.htaccess` bằng cách làm theo các ví dụ xuyên suốt hướng dẫn này, bạn sẽ cần:

* Một máy chủ Ubuntu 20.04 được thiết lập với non-**root** user có đặc quyền `sudo` và bật tường lửa. Bạn có thể làm điều này bằng cách làm theo hướng dẫn thiết lập máy chủ ban đầu của Ubuntu 20.04.
* Máy chủ web Apache được cài đặt trên máy chủ Ubuntu của bạn. Tìm hiểu cách thiết lập nó với hướng dẫn của chúng tôi về Cách cài đặt Máy chủ web Apache trên Ubuntu 20.04. Đảm bảo hoàn thành **Bước 5** và có tệp máy chủ ảo cho miền của bạn. Hướng dẫn này sẽ đề cập đến **your_domain** làm ví dụ xuyên suốt và sử dụng `/etc/apache2/sites-available/<^>your_domain.conf<^>` cho tệp máy chủ ảo.
* Nếu bạn muốn thực hành với một miền (tùy chọn), bạn có thể thiết lập một miền bằng cách mua một tên miền tại CloudFly, nhận một miền miễn phí trên Freenom hoặc sử dụng công ty đăng ký miền mà bạn chọn. Bạn cũng sẽ cần thiết lập cả hai bản ghi DNS sau cho máy chủ của mình: hai bản ghi A, một bản ghi `<^>your_domain<^>` và một bản ghi có `www.<^>your_domain<^>` trỏ tới địa chỉ IP công khai của máy chủ.
* Nếu bạn cũng muốn bảo mật máy chủ ảo của mình, bạn có thể làm như vậy bằng chứng chỉ đáng tin cậy miễn phí, chẳng hạn như trong hướng dẫn Let's Encrypt dành cho Apache của chúng tôi. Tuy nhiên, nếu bạn không có miền, bạn có thể sử dụng chứng chỉ tự ký để thay thế. Điều này cung cấp cùng một loại mã hóa, nhưng không có xác thực tên miền. Làm theo hướng dẫn SSL tự ký của chúng tôi dành cho Apache để thiết lập điều này.

Sau khi thiết lập xong, bạn có thể thực hành bật và tạo tệp `.htaccess` trong các bước tiếp theo.

## Kích hoạt tệp `.htaccess`

Nếu bạn có quyền truy cập vào cài đặt máy chủ, bạn có thể chỉnh sửa cấu hình Apache để cho phép tệp `.htaccess` ghi đè cấu hình trang web tiêu chuẩn.

Bắt đầu bằng cách mở tệp máy chủ ảo `apache2/sites-available/<^>your_domain<^>.conf` bằng trình soạn thảo văn bản ưa thích của bạn. Ở đây, chúng tôi sẽ sử dụng `nano`:
```command
sudo nano /etc/apache2/sites-available/<^>your_domain<^>.conf
```

Giả sử bạn đã làm theo Bước 5 của hướng dẫn cài đặt Apache tiên quyết, tệp này sẽ chứa các nội dung sau:
```nginx
[label /etc/apache2/sites-available/your_domain.conf]
<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>
```

Thêm khối nội dung `Directory` sau vào khối `VirtualHost`:
```nginx
[label /etc/apache2/sites-available/your_domain.conf]
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName <^>your_domain<^>
    ServerAlias www.<^>our_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 của khối nội dung `Directory` này là `AllowOverride All`, cho phép sử dụng các tệp `.htaccess`. Sau khi bạn đã thêm thông tin này, hãy lưu và đóng tệp. Nếu bạn đang sử dụng `nano`, bạn có thể thực hiện việc này bằng cách nhấn `CTRL + X` rồi nhấn `Y` và `ENTER`.

Tiếp theo, khởi động lại Apache:
```command
sudo service apache2 restart
```

Bây giờ cài đặt cấu hình của bạn đã được cập nhật để cho phép sử dụng các tệp `.htaccess`, trong bước tiếp theo, bạn sẽ tạo một tệp.

## Tạo tệp `.htaccess`

Để tạo tệp `.htaccess` trong thiết bị đầu cuối của bạn, bạn cần điều hướng đến thư mục gốc của web. Thư mục gốc web của bạn là nơi đặt tệp `.htaccess` để các cấu hình của bạn có thể được thực thi đúng cách cho trang web. Vị trí thích hợp của tệp `.htaccess` rất quan trọng vì các cấu hình trong tệp đó ảnh hưởng đến mọi thứ trong thư mục của nó và các thư mục sau nó. Điều này có nghĩa là nếu bạn đang phục vụ một vài trang web khác nhau trên cùng một máy chủ Apache, thì tệp `.htaccess` của bạn phải được đặt trong thư mục gốc của trang web dành riêng cho trang web cụ thể đó.

Nếu bạn làm theo các điều kiện tiên quyết, thư mục gốc web của bạn sẽ ở vị trí sau: `/var/www/<^>your_domain<^>/.htaccess`. Để tạo tệp `.htaccess` cho trang web của bạn, hãy chạy lệnh sau:
```command
sudo nano /var/www/<^>your_domain<^>/.htaccess
```

Bây giờ bạn đã học được một số cách để tạo tệp `.htaccess`, tiếp theo chúng ta sẽ xem xét một số cách sử dụng phổ biến của trang `.htaccess`.

## Sử dụng phổ biến cho một trang `.htaccess`

Có năm cách sử dụng phổ biến cho trang `.htaccess` trên trang web của bạn:

### Mod_Rewrite

Một trong những khía cạnh hữu ích nhất của tệp `.htaccess` là `mod_rewrite`. Bạn có thể sử dụng tệp `.htaccess` để chỉ định và thay đổi cách các URL và trang web trên trang của bạn được hiển thị cho người dùng của bạn. Tìm hiểu thêm về cách bạn có thể làm điều này với hướng dẫn của chúng tôi về Cách thiết lập `mod_rewrite`.

### Authentication (Xác thực)

Để thiết lập xác thực bảo mật với `.htaccess`, bạn có thể tạo một tệp mật khẩu có tên `.htpasswd` để xác thực người dùng. Thực hiện thay đổi này sẽ tạo ra một cổng thông tin mật khẩu nhắc khách truy cập trang web nhập mật khẩu nếu họ muốn truy cập các phần nhất định của trang web. Khi tạo tệp này, đảm bảo lưu trữ tệp ở nơi khác ngoài thư mục web vì lý do bảo mật.

Để tạo tệp, hãy chạy lệnh `htpasswd` và bao gồm tùy chọn `-c` và tên người dùng để tạo tệp `htpasswd` được chỉ định. Khi điều này xảy ra, một lời nhắc sẽ yêu cầu bạn cung cấp mật khẩu. Bạn có thể chèn bao nhiêu dòng tùy ý vào tệp `htpasswd`, nhưng hãy đảm bảo rằng mọi người dùng đều có dòng tương ứng của riêng họ. Ví dụ sau minh họa cách tạo một mục mới trong tệp, trong trường hợp này là cho người dùng **sammy**:
```command
sudo htpasswd -c /etc/apache2/.htpasswd <^>sammy<^>
```

Bạn có thể kiểm tra nội dung của tệp này bằng cách chạy `cat /etc/apache2/.htpasswd` và nó sẽ xuất tên người dùng và mật khẩu được mã hóa cho mỗi bản ghi bạn đã thêm.

Khi bạn đã thêm (những) người dùng mong muốn của mình, tiếp theo hãy mở tệp `.htaccess`. Nếu bạn làm theo hướng dẫn điều kiện tiên quyết, hướng dẫn này sẽ nằm ở vị trí sau:
```command
sudo nano /var/www/<^>your_domain<^>/.htaccess
```

Hãy nhớ rằng trong ví dụ này, chúng tôi đang hạn chế toàn bộ tài liệu gốc dựa trên `/var/www/<^>your_domain<^>`, nhưng điều này có thể được đặt trong bất kỳ thư mục nào mà bạn muốn hạn chế quyền truy cập.

Khi tệp này được mở, hãy thêm các nội dung sau và lưu các thay đổi để bắt đầu sử dụng chức năng mật khẩu:
```nginx
[label /var/www/your_domain/.htaccess]
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
```

Để tìm hiểu thêm, hãy đọc hướng dẫn của chúng tôi về Cách thiết lập xác thực mật khẩu với Apache.

### Custom Error Pages (Trang lỗi tùy chỉnh)

Ngoài ra, tệp `.htaccess` cho phép bạn tạo các trang lỗi tùy chỉnh cho trang web của mình. Một số lỗi phổ biến nhất là:
* 400 Bad Request (Yêu cầu sai)
* 401 Authorization Required (Yêu cầu ủy quyền)
* 403 Forbidden Page (Trang cấm)
* 404 File not Found (Không tìm thấy tệp)
* 500 Internal Error (Lỗi nội bộ)

Để làm cho trang trở nên thân thiện với người dùng và cung cấp nhiều thông tin hơn cho khách truy cập trang so với trang lỗi máy chủ mặc định cung cấp, bạn có thể sử dụng tệp `.htaccess` để tạo các trang lỗi tùy chỉnh. Đọc thêm trong hướng dẫn của chúng tôi về Cách định cấu hình Apache để sử dụng các trang lỗi tùy chỉnh.

### MIME Types (Các loại MIME)

Trong trường hợp trang web của bạn có một số tệp ứng dụng mà máy chủ của bạn không được thiết lập để phân phối, bạn có thể thêm các loại Multipurpose Internet Mail Extensions (Phần mở rộng thư Internet đa năng - MIME) vào máy chủ Apache của mình trong tệp `.htaccess` với mã sau:
```nginx
[label /var/www/your_domain/.htaccess]
AddType audio/mp4a-latm .m4a
```

Đảm bảo thay thế ứng dụng và phần mở rộng tệp bằng loại MIME mà bạn muốn hỗ trợ. Đối với ví dụ này, chúng tôi đã chỉ định loại tệp âm thanh MIME.

### SSI

Server side includes (SSI) là một trình tiết kiệm thời gian tuyệt vời trên một trang web. Một trong những cách sử dụng phổ biến nhất của SSI là cập nhật một số lượng lớn các trang với một số dữ liệu cụ thể mà không phải cập nhật từng trang riêng lẻ. Ví dụ: nếu bạn muốn thay đổi trích dẫn ở cuối trang.

Để bật SSI, hãy chèn đoạn mã sau vào tệp `.htaccess` của bạn:
```nginx
[label /var/www/your_domain/.htaccess]
AddType text/html .shtml
AddHandler server-parsed .shtml</pre>
```

Những dòng này cho `.htaccess` biết rằng các tệp `.shtml` hợp lệ, với dòng thứ hai đặc biệt làm cho máy chủ phân tích cú pháp tất cả các tệp kết thúc bằng `.shtml` cho bất kỳ lệnh SSI nào.

Tuy nhiên, nếu bạn có nhiều trang `.html` mà bạn không muốn đổi tên bằng các phần mở rộng `.shtml`, thì bạn có thể sử dụng một chiến thuật khác để phân tích chúng cho các lệnh SSI, đó là `XBitHack`.

Bạn có thể sử dụng chiến thuật `XBitHack` này bằng cách thêm dòng sau vào tệp `.htaccess` để khiến Apache kiểm tra tất cả các tệp `.html` với các quyền thích hợp cho SSI:
```nginx
[label /var/www/your_domain/.htaccess]
XBitHack on
```

Để tạo một trang đủ điều kiện cho `XBitHack`, hãy sử dụng lệnh `chmod` để thay đổi quyền:
```command
chmod +x <^>pagename<^>.html
```

Bây giờ bạn đã hiểu về một vài cách sử dụng phổ biến cho trang `.htaccess`, tiếp theo bạn sẽ tìm hiểu thêm về tác động của tệp `.htaccess` đối với tốc độ và bảo mật.

## Tốc độ và bảo mật với tệp `.htaccess`

Mặc dù tệp `.htaccess` có thể được sử dụng để cải thiện trang web, nhưng có hai điều cần lưu ý rằng nó có thể ảnh hưởng: tốc độ và bảo mật.

Về tốc độ, tệp `.htaccess` có thể làm chậm máy chủ của bạn, nhưng đối với hầu hết các máy chủ, đây có thể là một thay đổi khó nhận thấy. Điều này có thể là do vị trí của trang vì tệp `.htaccess` ảnh hưởng đến các trang trong thư mục của nó và tất cả các thư mục sau nó. Điều này có nghĩa là mỗi khi một trang tải, máy chủ sẽ quét thư mục của nó và bất kỳ thư mục nào trước nó cho đến khi đến thư mục cao nhất hoặc tệp `.htaccess`. Quá trình này sẽ diễn ra miễn là chỉ thị `AllowOverride` cho phép sử dụng tệp `.htaccess` như đã được trình bày trong bước kích hoạt tệp `.htaccess`; các tệp `.htaccess` có thực sự tồn tại hay không.

Để bảo mật, tệp `.htaccess` dễ truy cập hơn nhiều so với cấu hình tiêu chuẩn của Apache và các thay đổi được thực hiện ngay lập tức (không cần khởi động lại máy chủ). Điều này cấp cho người dùng quyền thực hiện các thay đổi trong tệp `.htaccess`, giúp họ có nhiều quyền kiểm soát đối với chính máy chủ. Bất kỳ lệnh nào được đặt trong tệp `.htaccess` đều có tác dụng tương tự như trong chính cấu hình Apache. Cũng cần lưu ý rằng Apache thường không khuyến khích sử dụng `.htaccess` nếu người dùng có thể tự truy cập các tệp cấu hình Apache.

## Kết luận

Tệp `.htaccess` mang lại cho bạn rất nhiều sự linh hoạt để xây dựng trang web của mình. Để tìm hiểu thêm về cách bảo mật trang web của bạn, hãy đọc hướng dẫn của chúng tôi về cách thiết lập xác thực mật khẩu với Apache. Bạn cũng có thể đọc thêm trong hướng dẫn của chúng tôi về cách cài đặt máy chủ web Apache và các Tệp và Thư mục Apache đặc biệt quan trọng.
