Căn bản về SSI trên Apache :
trang này đã được đọc lần
Using Server Side Includes
Trong khi các file HTML chuẩn dùng cho lưu giữ các trang rất tốt, thì khả năng tạo ra một số nội
dung động của nó cũng rất đáng hoan nghênh. Lấy ví dụ, đưa thêm vào một footer hay một
header vào tất cả các file, hoặc là đưa vào thông tin về tài liệu ví như thời gian sửa đổi gần nhất
một cách tự động. Điều này có thể thực hiện bằng CGI được, nhưng nó lại đòi hỏi những kĩ năng
lập trình hoặc viết mã kịch bản mà vấn đề đó thì không hề đơn giản. Đối với những trang tài liệu
động đơn giản thì chúng ta có một giải pháp thay thế khác: đó là các nội dung đưa vào từ máy
chủ (SSI). Bài này là một trong loạt bài về SSI do chúng tôi biên soạn, với các mức độ khác nhau
về cú pháp. Nếu các bạn muốn theo dõi về chủ đề này xin đến với Diễn dàn Công nghệ thông tin
VN />SSI cho phép bạn gắn kèm một số câu lệnh đặc biệt vào trong chính trang HTML. Khi mà server
đọc một tài liệu có chứa SSI, nó sẽ tìm kiếm các câu lệnh này và thực hiện các hành động cần
thiết. Ví dụ, có một câu lệnh SSI thực hiện chức năng nhập vào thời gian sửa đổi gần nhất của
tài liệu. Khi server đọc được một file có dòng lệnh này trong đó, nó sẽ thay thế dòng lệnh bằng
thời gian thích hợp.
Apache có chứa một tập hợp các câu lệnh SSI dựa theo một số câu lệnh có trong máy chủ NCSA
cộng với nhiều câu lệnh mở rộng khác. Điều này được thực hiện với the includes module
(mod_includes). (Bạn có thể hiểu là một chương trình có chức năng tổng hợp)
Telling Apache to Use SSI
Theo mặc định thì máy chủ không hơi đâu mà đi tìm trong các file HTML xem có các câu lệnh
SSI hay không. Điều này làm giảm tốc độ mọi lần truy cập đến một file HTML. Để sử dụng SSI
bạn cần báo cho Apache biết là các tài liệu nào thì có chứa các câu lệnh SSI.
Một cách để làm được điều này là dùng một file có phần mở rộng đặc biệt. Thường thì người ta
dùng .shtml, và nó có thể được lên cấu hình (configured) cùng với cái directive tức cái lời hướng
dẫn này:
AddHandler server-parsed .shtml
AddType text/html shtml
Chỉ thị AddHandler bảo cho Apache biết cách xử lý mọi file .shtml như là một loại mà có chứa các
câu lệnh SSI. Chỉ thị AddType thì thực hiện cái điều là làm cho các nội dung được xử lý ấy được
đánh dấu như là HTML để trình duyệt hiển thị nó một cách chính xác.
Một phương pháp thay thế khác để thông báo cho server biết file nào là có chứa các câu lênh
SSI là sử dụng cái gọi là XBitHack. Cái này liên quan đến việc thiết lập the execute bit mà tôi tạm
dịch là bit thực thi trên các file HTML. Bất cứ một file này có loại nội dung (content type) là text/
html (ví dụ có phần mở rộng là .html) và có chứa một tập hợp bit thực thi thì sẽ được kiểm tra
xem có chứa các câu lệnh SSI hay không. Để làm điều này thì cần phải đưa vào chỉ thị XBitHack .
Trong cả hai phương pháp thì server cũng cần phải được lên cấu hình để cho phép dùng các câu
lệnh SSI. Điieù này đượct hực hiện với chỉ thị Options Includes , cái này cần được đặt trong hoặc
là tệp tin toàn cục mang tên access.conf (the global access.conf) hoặc là tệp tin địa phương
.htaccess (local .htaccess) (mặc dầu là cái thứ hai bắt buộc phải được enabled bằng chỉ thị
AllowOverride Options). Bởi vì một số câu lệnh SSI cho phép dùng các chương trình thực thi mà
có thể mang tới rủi ro về vấn đề security, nên có một giải pháp thay thế tùy chọn,
IncludesNOExec cho phép các câu lệnh SSI đều thực hiện được ngoại trừ những câu lệnh nào
thực thi một chương trình.
SSI Commands
Tất cả các câu lệnh SSI được lưu giữ trong file HTML bằng các kí hiệu ghi chú của HTML. Một
câu lệnh SSI bình thường trông giống như thế này:
Trong trường hợp này câu lệnh là flastmod, nó có nghĩa là đưa ra thông tin là thời gian sửa đổi
gần nhất của file đó. Các đối số (argument) xác định cụ thể file đó là "this.html" (đây là tên của
file có chứa câu lệnh này). Toàn bộ phần viết ra câu lệnh, mà được chứa trong kí hiệu đánh dấu
phần chú thích ãe được thay thế bằng kết quả của câu lệnh này.
Nói chung thì tất cả các câu lệnh đều có cái format tức cái công thức như sau:
trong đó arg1, arg2, vân vân là các cái tên của các đối số và value1, value2 vân vân là các giá trị
của các đối số đó. Trong ví dụ về flastmod, đối số là 'file' và giá trị của nó là 'this.html'. Thường
thì các câu lệnh có thể nhận các tên của đối số khác nhau. Ví dụ, flastmod có thể được trao cho
một URL với đối số là virtual, để lấy được thời gian của lần sửa đổi gần nhất từ server. Ví dụ:
để nhận được thời gian sửa đổi gần nhất của trang chủ trên server đó (điều này là hữu ích nếu
như trang được truy cập đó có thể có một tên khác, ví dụ là như thế).
Bên cạnh flastmod, có các câu lệnh SSI làm chức năng là lấy kích thước (size) của một file hay
một URL, các nội dung của một biến (được máy chủ truyền vào trong), các nội dung của một file
khác hay URL khác, hoặc kết quả của việc chạy một local file tức là một tệp tin trong nội bộ site.
Những câu lệnh này được nêu ra trong NCSA tutorial về vấn đề server side includes.
Khi các câu lệnh SSI được thực thi, một số các biến môi trường ('environment variables') được
thiết lập. Điều này hàm chứa các biến CGI (REMOTE_HOST etc), và thêm một số cái nữa, như là
DOCUMENT_NAME và LAST_MODIFIED. Các biến này có thể là thông tin đầu ra (output) với câu
lệnh echo (do vậy cách tốt hơn để lấy ra thời gian sửa đổi gần nhất của file hiện thời sẽ là ).
Extended SSI
Apache mở rộng ngôn ngữ SSI chuẩn (NCSA-compatible) một cách đáng kể. Một số mở rộng
gồm có:
Các biến trong các câu lệnh: Apache cho phép các biến được dùng trong bất cứ một câu lệnh SSI
nào. Ví dụ, thời gian sửa đổi gần nhất của tài liệu hiện thời có thể lấy ra với
Thiết lập các biến: câu lệnh set có thể được dùng bên trong SSI để thiết lập các biến.
Các điều kiện: các câu lệnh SSI if, else, elif và endif có thể được dung để đưa các phần của file
vào dựa trên các kiểm tra mang tính điều kiện. Ví dụ, biến $HTTP_USER_AGENT có thể được
kiểm tra để xem loại của trình duyệt và thông tin đầu ra bằng các mã HTML khác nhau tùy thuộc
vào các khả năng của trình duyệt ấy.
Các ví dụ
Đây là một số ví dụ dùng SSI:
Displaying document information
Mã sau đây đặt thời gian sửa đổi gần nhất lên trang đó:
Last modified:
Adding a footer to many documents
Hãy đặt đoạn mã sau đây xuống tận cùng của mỗi trang tài liệu:
Hide links from external users
Dùng câu lệnh if và biến REMOTE_ADDR CGI để xem xét xem liệu người sử dụng đó có ở trong
vùng nội bộ hay không (the local domain):
Internal Documents
(Trong đó 1.2.3 là phần đầu (prefix) của địa chỉ IP của the local domain).