我動態地添加ssi包括基於變量,我希望能夠有一個默認包括萬一文件不存在。即:SSI - 測試文件是否存在
if /file/testthisfile.ssi exists
add /file/testthisfile.ssi
else
add /file/default.ssi
這可能嗎?
謝謝!
我動態地添加ssi包括基於變量,我希望能夠有一個默認包括萬一文件不存在。即:SSI - 測試文件是否存在
if /file/testthisfile.ssi exists
add /file/testthisfile.ssi
else
add /file/default.ssi
這可能嗎?
謝謝!
不 - 我害怕那個答案。但對於將來可能遇到此問題的任何人,我確實找到了適用於簡單情況的解決方法。您可以編輯的錯誤消息,在我的情況下,輸出的圖像:
<!--#config errmsg="<img src='/file/testthisfile.jpg' alt='' />" -->
因此,如果該文件不存在,您可以設置默認。
必須強調,這隻適用於簡單的情況,但它是一個很好的小工作!
SSI不支持文件檢測。
我想了一會兒,確實ahgood是正確的,SSI沒有內置的文件檢測功能,所以流量控制是有限的。
順便說一句,我沒有找到SSI的擴展版本的引用(一個VMS爲基礎的系統)
http://wasd.vsm.com.au/doc/env/env_0400.html
,並有一些擴展,將允許你檢查在某些文件存在一種時尚。
但是,如果有人使用SSI,可能會在LAMP環境中運行,所以可以利用SSI在include語句中運行CGI/PHP腳本的能力。
沒有太多的麻煩,人們可以訴諸:
<body>
<!--#include virtual="insert_intro.html" -->
<h2>Insert An Existing File</h2>
<!--#include
virtual='checkFileExists.php?fn=insert_help.html&df=insert_default.html' -->
<h2>Insert a Non-Existing File</h2>
<!--#include
virtual='checkFileExists.php?fn=insert_no_help.html&df=insert_default.html' -->
</body>
它使用PHP腳本來完成所有的文件檢查:
<?php
$theFileName = $_GET['fn'];
$theDefault = $_GET['df'];
if (file_exists($theFileName) === TRUE) {
include($theFileName);
} else {
include($theDefault);
}
?>
我通過兩個文件名,預期的文件備份/默認文件,腳本檢查第一個,如果找不到,則使用第二個。
這種方法引發了一個問題,爲什麼在PHP可用時使用SSI?在某些情況下,特別是在遺留系統中,可能會有一個基於SSI的大型網站,儘管不夠優雅,但可以解決問題。
PHP不是強制性的,PERL腳本也可以工作。我試圖使用PHP的apache_setenv
,但我無法弄清楚如何在PHP,Apache和SSI之間傳遞環境變量(我也嘗試設置$ _SERVER和$ _ENV變量但沒有成功)。
事實上,與這裏的答案相反,SSI確實支持文件存在測試。這是語法
<!--#if expr="-A /private" -->
Click <a href="/private">here</a> to access private information.
<!--#endif -->
支持-A標誌可能需要在您的apache配置中啓用。
在這個地方SSI所用的表述已被提取出來到這裏記錄
http://httpd.apache.org/docs/current/expr.html
Apache的一個表達式模塊,但-A標誌也是「遺產」 SSI表達解析器可用。
下面是v2.2配置變量文檔的鏈接: http://httpd.apache.org/docs/2.2/mod/mod_include.html#ssienableaccess 如果我將它從「2.2」編輯爲「當前」,我發現但它似乎已經消失。它被...取代了嗎?不再支持? (這顯然不是沒有爭議;這不適用於我的服務器的默認配置。) – fortboise 2014-10-01 17:49:27
「-A」不檢測是否存在,只檢查URL是否可訪問(不禁止)。還要注意,儘管v2.2文檔中提到「SSIEnableAccess」,但至少v2.2.24並不認爲這是一個有效的指令。 「SSIAccessEnable」似乎工作。 – 2015-02-04 17:07:44
這不是SSI解決方案,如果我們可以使用PHP代替,那麼問題將很容易解決。 =) – ahgood 2011-03-09 00:40:22
確實的確如此...我仍然認爲混合解決方案值得一提。 – 2011-03-09 01:21:02
這種方法也會引入嚴重的安全問題。 – insaner 2015-08-20 10:05:24