apache 开启SSI 支持include及shtml语法配置中错误解决
apache 开启SSI 支持include及shtml语法配置中错误解决
SSI模块,apache要使用SSI需要开启模块同时配置ssi支持的文件类型。
SSI的优势,SSI是英文Server Side Includes的缩写,翻译成中文就是服务器端包含的意思。从技术角度上说,SSI就是HTML文件中,可以通过注释行调用的命令或指针。SSI 具有强大的功能,只要使用一条简单的SSI 命令就可以实现整个网站的内容更新,动态显示时间和日期,以及执行shell和CGI脚本程序等复杂的功能。SSI 可以称得上是那些资金短缺、时间紧张、工作量大的网站开发人员的最佳帮手。
SSI最初在NCSA服务器平台上推出,在Apache服务器中得到扩展和加强,目前已经可以在几乎所有的服务器上运行。
apache开启SSI模块,文件httpd.conf
找到:LoadModule ssl_module modules/mod_ssl.so 去掉前面的注释符号#,让其起作用,服务器默认是不加载该服务的
同样在文件httpd.conf 中开启SSI支持的文件类型,默认的是.shtml 你可以自行添加自己需要的文件类型,比如.html
搜索:AddType
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
同样,前面的注释符号去掉,让其起作用,如果需要其他类型的文件,可以在.shtml后面加空格 然后添加,比如下面:
AddType text/html .shtml .html .htm
AddOutputFilter INCLUDES .shtml .html .htm
最后一步,在站点目录配置Options 中添加支持INCLUDES 命令,有的人的站点目录配置是直接在httpd.conf 中的,有的人是自定义文件的。
格式 Options FollowSymLinks ExecCGI INCLUDES 或者 Options +FollowSymLinks +ExecCGI +INCLUDES
这里需要注意的是,ssi可以利用shell来执行命令,因此这个功能是有危险的,它会执行任何包含在exec标记中的命令,如果你的用户有权限修改你的网页内容,建议把该功能关闭。当然你还可以加上IncludesNOEXEC参数,来关闭exec功能,同时又保留SSI。
格式就变为:Options FollowSymLinks ExecCGI INCLUDES IncludesNOEXEC 或者 Options +FollowSymLinks +ExecCGI +INCLUDES +IncludesNOEXEC
最后需要说明的是关于路径报错的处理,an error occurred while processing this directive,这是一个绝对路径和相对路径的冲突,处理的方法,可以直接在Directory 语句中添加SSILegacyExprParser on 语句,如下:
<Directory />
Options +Indexes +FollowSymLinks +ExecCGI +INCLUDES +IncludesNOEXEC
AllowOverride All
Order allow,deny
Allow from all
Require all granted
SSILegacyExprParser on
</Directory>
如果仍然不行,可以把程序中调用的file换成virtual 解决路径错误的问题
原:<!--#include file="top.shtml"--> 换成:<!--#include virtual="top.shtml"-->
virtual 文件名是 Web 站点上的虚拟目录的完整路径。如表示相对于服务器文档根目录下hoyi目录下的top.shtml文件;则为virtual="/hoyi/top.shtml"
如果使用的是虚拟机不是独立配置的服务器的设置方法,服务器需要开启伪静态 使用.htaccess方法设置
直接添加语句:
Options Indexes FollowSymLinks Includes
AddType application/x-httpd-CGI .CGI
AddType text/x-server-parsed-html .shtml .html
关于shtml和html 的选择
如果只是几个页面使用ssi 可以考虑使用shtml,多个页面使用的话还是建议使用html