舉個簡單的例子,比如有如下的 html 檔案(命名為 index.html):
<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,把前面的注釋(#)去掉。
2、添加需要的檔案類型
同樣在 httpd.conf 檔案下找到如下兩行代碼:
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
有注釋的話一樣去掉注釋。因為使用 ssi 技術的預設檔案名稱為 .shtml,所以我們需要在設定檔中對 .shtml 尾碼名進行設定,並按自己的需求設定需要對 ssi 技術進行解析的檔案類型設定。
比如這裡我要用 .html 的檔案進行操作,所以可以在上面兩行代碼末添加,比如這樣:
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 檔案了,比如這樣:
<input type='text' />
<!--#include virtual="btn.html" -->
也可以用 file 參數:
<input type='text' />
<!--#include file="btn.html"-->
有什麼區別呢...
include 元素能按 file 屬性或 virtual 屬性判斷應該包含的檔案。file 屬性是一個相對於目前的目錄的檔案路徑,即不能是一個絕對路徑(以 "/" 開頭)或包含 "../" 的路徑,也就是說被包含檔案可以在同一級目錄或其子目錄中,但不能在上一級目錄中。virtual 屬性可能更有用,它是一個相對於被提供的文檔的URL ,可以以 "/" 開頭,但必須與被提供的文檔位於同一伺服器上,virtual 檔案名稱是 Web 網站上的虛擬目錄的完整路徑。
通俗地說,virtual 相當於絕對路徑(從伺服器根目錄出發),而 file 相當於相對路徑(而且檔案還不能在上級目錄)。所以一般用 virtual 就 ok 了。
讓Apache支援SHTML(SSI)的配置方法
shtml和asp有一些相似,以shtml命名的檔案裡,使用了ssi的一些指令,就像asp中的指令,你可以在SHTML檔案中寫入SSI指令,當用戶端訪問這些shtml檔案時,伺服器端會把這些SHTML檔案進行讀取和解釋,把SHTML檔案中包含的SSI指令解釋出來。
伺服器採用shtml速度會比html慢,比php快。shtml的特點就是能夠進行頁麵包含,能夠局部更新頁麵包含部分。廣泛採用可以很容易解決網頁中的廣告問題,不需要更新全面靜態頁面。而只需更新一個包含頁面即可。下面我們來看看Apache解析SHTML配置(SSI)的方法:
開啟檔案,搜尋shtml
把最前兩行的#號去掉,即成如下
如是要想整個伺服器配置shtml的話
再搜尋Options Indexes FollowSymLinks
在裡面添加Includes如下所示:
OK 重啟apache
然後測試,建立兩個檔案,其實一個叫header.shtml和一個index.shtml
header.shtml代碼如下:
用了兩種形式的包含:如果想要瞭解,請找相關文檔
然後訪問:
shtml配置成功。。。很好很強大吧。
下面再說一下如是不是全域配置,而是分網站配置的話。可以如下:具體本人沒有測試過,均來源於網路。
簡說一下吧:
file 檔案名稱是一個相對路徑,該路徑相對於使用 #include 指令的文檔所在的目錄。被包含檔案可以在同一級目錄或其子目錄中,但不能在上一級目錄中。如表示目前的目錄下的的nav_head.htm文檔,則為 file="nav_head.htm"。 virtual 檔案名稱是 Web 網站上的虛擬目錄的完整路徑。如表示相對於伺服器主目錄下hoyi目錄下的nav_head.htm檔案;則為virtual="/hoyi/nav_head.htm"
以上是全域的配置,如是沒這樣寫的話
可以在單個目錄下設定:
配置虛擬目錄可以如下設定:
NameVirtualHost www.xxx.com
<VirtualHost www.xxx.com:80>
DocumentRoot F:xing ServerName www.xxx.com
</VirtualHost>
<Directory "F:xxx">
Options Indexes FollowSymLinks
Includes AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
AllowOverride None Order allow,deny Allow from all
</Directory>