寫頁面的同學通常會遇到這樣的煩惱,就是頁面上的 html 標簽越來越多的時候,尋找指定的部分就會很困難,那么能不能像 javascript 一樣寫在不同的文件中引入呢?答案是有的,apache 能做到。
舉個簡單的例子,比如有如下的 html 文件(命名為 index.html):
1
2
|
< input type = 'text' /> < input type = 'button' value = 'press' /> |
一個簡單的文本框和按鈕,我現在想把按鈕部分的 html 寫在另一個 .html 的文件中(比如說叫 btn.html)然后引入到 index.html 中,要怎么做呢?
1、加載 ssi 模塊
首先要加載 ssi 模塊。打開 apache 的配置文件 httpd.conf,這個文件應該都已經很熟悉了,前面的文章中多次提到。找到這么一行 LoadModule ssl_module modules/mod_ssl.so,把前面的注釋(#)去掉。
2016.01.11 更:
經本地測試,此步驟并不是必須的,多謝 whuper 指出。
2、添加需要的文件類型
同樣在 httpd.conf 文件下找到如下兩行代碼:
1
2
|
AddType text/html .shtml AddOutputFilter INCLUDES .shtml |
有注釋的話一樣去掉注釋。因為使用 ssi 技術的默認文件名為 .shtml,所以我們需要在配置文件中對 .shtml 后綴名進行設置,并按自己的需求設置需要對 ssi 技術進行解析的文件類型設置。
比如這里我要用 .html 的文件進行操作,所以可以在上面兩行代碼末添加,比如這樣:
1
2
|
AddType text/html .shtml .html AddOutputFilter INCLUDES .shtml .html |
3、添加 INCLUDES
還是在 httpd.conf 文件中,找到這樣一行 Options Indexes FollowSymLinks
,在后面添加 INCLUDES,變成這樣:
Options Indexes FollowSymLinks INCLUDES
需要注意的是,ssi 可以利用 shell 來執行命令,因此這個功能是有危險的,它會執行任何包含在 exec 標記中的命令,如果你的用戶有權限修改你的網頁內容,建議把該功能關閉。當然你還可以加上IncludesNOEXEC 參數,來關閉 exec 功能,同時又保留 SSI 。此時改為: Options Indexes FollowSymLinks INCLUDES IncludesNOEXEC
4、重啟 apache
最后一點,重啟 apache 千萬不能忘記,有些童鞋剛開始配置 apache 的時候,經常會說怎么不起作用啊,很多時候就是忘記重啟了。
5、實踐
通過這樣的配置我們就能在 html 頁面中引入 html 文件了,比如這樣:
1
2
|
<input type='text' /> <!--#include virtual="btn.html" --> |
也可以用 file
參數:
1
2
|
<input type='text' /> <!--#include file="btn.html"--> |
有什么區別呢...
include 元素能按 file 屬性或 virtual 屬性判斷應該包含的文件。file 屬性是一個相對于當前目錄的文件路徑,即不能是一個絕對路徑(以 "/" 開頭)或包含 "../" 的路徑,也就是說被包含文件可以在同一級目錄或其子目錄中,但不能在上一級目錄中。virtual 屬性可能更有用,它是一個相對于被提供的文檔的URL ,可以以 "/" 開頭,但必須與被提供的文檔位于同一服務器上,virtual 文件名是 Web 站點上的虛擬目錄的完整路徑。
通俗地說,virtual 相當于絕對路徑(從服務器根目錄出發),而 file 相當于相對路徑(而且文件還不能在上級目錄)。所以一般用 virtual 就 ok 了。
參考: