[PHP nâng cao]Hướng dẫn sử dụng .htaccess trong PHP

Xin chào các bạn, hôm nay edu.com.vn sẽ giới thiệu và hướng dẫn các bạn sử dụng một số tính năng thông dụng của tập tin .htaccess trong PHP.

Tập tin .htaccess là gì?

Tập tin .htaccess (hypertext access) là một tập tin cho phép chúng ta thay đổi cấu hình server trên từng thư mục. Tập tin này chứa một hoặc nhiều cài đặt, được đặt trong thư mục của website, và các cài đặt trong file sẽ ảnh hưởng đến thư mục đó và các thư mục con của nó.
Các công dụng cơ bản của tập tin .htaccess như tạo các trang báo lỗi ( lỗi 404 – not found), chuyển hướng người dùng, tùy biến địa chỉ URL, v.v

Tại sao phải dùng tập tin .htaccess ?

Thông thường, chúng ta chỉ sử dụng file .htaccess để cấu hình khi chúng ta không có quyền chỉnh sửa file cấu hình chính của server (file httpd.conf). Ví dụ cho trường hợp chúng ta sử dụng shared hosting bắt buộc phải dùng file .htaccess để thay đổi cấu hình phù hợp cho website. Tuy nhiên cần phải xem xét lại nếu chúng ta dùng riêng máy chủ ảo (VPS).
Khi website được truy cập, server sẽ tìm file .htaccess của thư mục đang được truy cập và đồng thời server cũng sẽ tìm tất cả các file .htaccess trong các thư mục cha của thư mục này. Ví dụ: chúng ta truy cập đến file index.php trong thư mục /www/htdocs/vidu-1/ qua đường dẫn: localhost/vidu-1. Server lúc này sẽ tìm tất cả các file .htaccess sau:

/.htaccess
/www/.htaccess/
/www/htdocs/.htaccess/
/www/htdocs/vidu-1/.htaccess

Tuy nhiên chúng ta không cần phải bận tâm đến việc tất cả các file có tồn tại hay không. Chúng ta chỉ cần quan tâm đến file .htaccess trong thư mục cần được cấu hình, bởi vì chỉ cần một dấu cách ( space) trong file .htaccess cũng có thể dẫn đến server báo lỗi 500 Internal Server Error.

Sử dụng .htaccess

Cách sử dụng .htaccess

Để tạo file .htaccess, chúng ta mở một text editor bất kì sau đó lưu file trong thư mục của website với tên file là “.htaccess”
Đôi khi nhà cung cấp hosting không hỗ trợ file .htaccess, khi đó file .htaccess sẽ không thể cấu hình được như ý chúng ta mong muốn.

Tùy chỉnh trang báo lỗi

Tạo riêng trang báo lỗi sẽ rất hữu ích, điều này cho phép bạn thông báo đến người truy cập biết rằng đã có một lỗi nào đó xảy ra khi họ đang cố gắng truy cập vào website của bạn như lỗi “404-không tìm thấy”. Các này giúp chúng ta có thể thay thế các trang thông báo lỗi xấu xí mặc định của server.
Đầu tiên chúng ta tạo một trang html dành cho báo lỗi. Ví dụ ở đây tạo trang 404.html báo lỗi 404-không tìm thấy. Sau đó tạo file .htaccess và lưu cùng thư mục với file index với nội dung file .htaccess như sau:

ErrorDocument 404 /404.html

Câu lệnh trên đã cấu hình cho server biết rằng khi người truy cập cố gắng truy cập vào một trang không tồn tại thì sẽ tải trang 404.html để thông báo cho người dùng biết rằng nội dung truy cập không tồn tại.

ErrorDocument <error_code> <error_page_path>

Trong đó:
– error_code: mã lỗi
– error_page_path: đường dẫn đến file báo lỗi tương ứng

Một số mã lỗi thông dụng:
– 400: Yêu cầu tệ
– 401: Yêu cầu đăng nhập
– 403: Bị cấm
– 404: Không tìm thấy
– 408: Hết giờ yêu cầu
– 500: Lỗi server

Với mỗi lỗi chúng ta xây dựng 1 trang html tương ứng và 1 dòng ErrorDocument tương ứng

ErrorDocument 401 /error_pages/401.html
ErrorDocument 404 /error_pages/404.html
ErrorDocument 500 /error_pages/500.html

Chuyển hướng

Chuyển hướng cho phép chúng ta chuyển hướng truy cập người dùng đến một nơi khác mà chúng ta mong muốn. Ví dụ nếu bạn di chuyển nội dung của trang web và bạn muốn chuyển hướng người truy cập từ website cũ đến website mới.
Cách sử dụng, thêm vào file .htaccess

Redirect /old_dir/ http://www.edu.com.vn/new_dir/index.html

Ví dụ trên cho thấy nếu người dùng truy cập vào bất kì file nào trong thư mục /old_dir, server sẽ chuyển hướng về trang index.html ở địa chỉ mới. Một lưu ý khá quan trọng trong cách viết địa chỉ như trên, bởi vì chỉ cần bạn viết sai địa chỉ có thể dẫn đến lỗi. Chúng ta có thể thấy ở đây rằng thư mục /old_dir có địa chỉ đầy đủ là www.yourdomain.com/old_dir. Cách viết /old_dir là địa chỉ tương đối, và www.youdomain.com/new_dir là địa chỉ tuyệt đối. Như vậy, khi chúng ta muốn chuyển hướng người truy cập, chúng ta chuyển hướng từ địa chỉ tương đối sang địa chỉ tuyệt đối. Và điều ngược lại sẽ gây lỗi.

Chặn người truy cập

Server cho phép chúng ta chặn truy cập đối với một người khách cụ thể, hoặc cho phép những người khách nào được truy cập. Điều này cực kì quan trọng trong việc chặn những truy cập không mong muốn.
Để thực hiện việc chặn, chúng ta thêm vào file .htaccess như sau:

order allow,deny
deny from 255.0.0.0
deny from 123.45.6.
allow from all

Ví dụ ở trên cho phép chặn các truy cập từ IP 255.0.0.0 và 123.45.6. Địa chỉ IP thứ 2 thiếu đi số cuối cùng, điều này có nghĩa những địa chỉ 123.45.6.0 đến 123.45.6.255.

Những truy cập bị chặn sẽ được thông báo lỗi 403 Forbidden. Bạn có thể thay đổi báo lỗi mặc định bằng cách cấu hình Error Documents

Bảo vệ file media

Công việc này giúp chúng ta chặn không cho các website khác sử dụng hình ảnh, âm nhạc, hoặc file khác thuộc website của chúng ta. Việc sử dụng này sẽ làm hao phí băng thông của bạn ( có thể trả phỉ ). Ví dụ trên website bạn có các hình ảnh, và 1 website khác không thuộc hosting của bạn sử dụng những hình ảnh đó của bạn. Như vậy vô tình bạn sẽ bị mất băng thông nhưng không phải do khách hàng truy cập vào website của bạn.

Để cài đặt lấy link file .gif, .jpg, .css, chúng ta tạo file .htaccess và thêm vào:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?edu.com.vn/.*$ [NC]
RewriteRule \.(gif|jpg|css)$ - [F]

Lưu ý cần mở ‘mod_rewrite’ module của Apache2.

Sử dụng DirectoryIndex

Lệnh này cho phép bạn cài đặt trang mặc định khi truy cập vào 1 thư mục ( mặc định là trang index.htm hoặc index.html, index.php ).

Ví dụ bạn muốn đặt file mặc định cho thư mục là home.htm, hãy tạo file .htaccess và đặt lệnh sau:

DirectoryIndex home.htm

Tuy nhiên khi đặt lệnh trên, tất cả các file index mặc định trong apache đều không được hiểu là trang index. Do đó nếu muốn apache hiểu nhiều file là trang index, chúng ta sử dụng lệnh sau

DirectoryIndex index.html home.htm home.php

Dòng trên đặt trang mặc định là index.html, home.htm, home.php.

Tổng kết

Trên đây edu.com.vn đã giới thiệu cho các bạn một số lệnh cơ bản dùng trong .htaccess để cấu hình server theo ý cá nhân. Tuy nhiên không phải server hosting nào cũng hỗ trợ, do đó bạn có thể cần phải liên hệ với nhà cung cấp để có thêm thông tin.