我动态地添加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