Apache中配置SSI

SSI是英文Server Side Includes的缩写,翻译成中文就是服务器端包含的意思。从技术角度上说,SSI就是在HTML文件中,可以通过注释行调用的命令或指针。

SSI功能非常强大(这个是别人说的)。在我看来,它的作用也就是实现静态网页的局部动态更新。但就是这一点,帮了我们很大的忙。尤其是在多个静态网页包含了同样的内容的时候。如果这一部分内容需要更新,在不使用SSI包含功能的时候,就需要把所有的静态网页更新一遍。这是一个非常繁琐又容易出错的工作。这个时候SSI就派上用场了。把静态页中需要更新的部分单独拿出来,写入html文件中,然后将这个文件使用<!--include virtual=""-->形式包含到所有的静态文件,一般是.shtml文件。这样,只要更新这个html文件的内容,所有.shtml文件的内容就跟着变化了。可谓是一劳永逸。

在Apache中配置SSI

1、开启mime_module, 即找到 #LoadModule mime_module modules/mod_mime.so ,去掉前面的#号。如果已经去掉了,忽略这条。

2、添加类型,在mime_module内部添加所有可能包含的类型

<IfModule mime_module>
    AddType text/html .shtml .html .htm .tpl .ssi
    AddOutputFilter INCLUDES .shtml .html .htm .tpl .php
</IfModule>

3、配置Options指令。搜索 Options Indexes FollowSymLinks,在后面加Includes, 成为 Options Indexes FollowSymLinks Includes

  到此为止,SSI已配置完成,一般情况下,包含文件就OK啦。

文件包含引用的方法:

引用绝对路径的文件:<!--#include file="e:/w2/top.shtml"-->

引用当前虚拟目录文件:<!--#include virtual="include/top.html"-->

路径要写正确,路径不正确会报错:[an error occurred while processing this directive]

还可以这么用: <!--#echo var="DATE_LOCAL" --> 输出当地时间。

但是,在我自己的开发环境下,上面的这些怎么配置都无法实现。

看了好多文档,做了很多尝试,最后发现把Apache的配置中的 AllowOverride All 改为AllowOverride None 。引用包含文件就不会报错了。

但是这样就会把 .htaccess文件完全屏蔽,这样,写在.htaccess文件中的其他命令也就不起任何作用了。改为 AllowOverride FileInfo, .htaccess恢复使用。这是文件包含又不能用。查了一下.htaccess文件,发现里面只有url rewrite相关的内容。于是,我便做了以下改动:

  1. .htaccess文件里的内容都放在Apache配置文件里

  2. 把.htaccess文件彻底删除。

  3. 修改AllowOverride配置为:AllowOverride None

这下,包含文件的问题,路径重写的问题全都搞定了。



关于Options指令:

Options指令是Apache配置文件中一个比较常见也比较重要的指令,Options指令可以在Apache服务器核心配置(server config)、虚拟主机配置(virtual host)、特定目录配置(directory)以及.htaccess文件中使用。Options指令的主要作用是控制特定目录将启用哪些服务器特性。

根据以上说法,可以根据需要,在不同的地方加 Options指令,可以单独的 Options Includes, 也可以使用复合的 Options Indexes FollowSymLinks Includes,具体指令的意思,可以参考手册。

在使用了虚拟机的服务器中,如果之想在某个虚拟机中使用Includes,可以只在虚拟机中配置Options Includes.

   

关于AllowOverride:


Apache的配置文件httpd.conf是主要的配置文件,但是针对每个目录,apache还允许在它们各自的目录下防止一个叫做.htacess的文件,这个文件同样也能控制这个目录的属性 

AllowOverride参数就是指明Apache服务器是否去找.htacess文件作为配置文件,如果设置为none,那么服务器将忽略.htacess文件,如果设置为All,那么所有在.htaccess文件里有的指令都将被重写。对于AllowOverride,还可以对它指定如下一些能被重写的指令类型. 

1、AuthConfig  允许使用所有的权限指令,他们包括AuthDBMGroupFile AuthDBMUserFile  AuthGroupFile  AuthName AuthTypeAuthUserFile和Require 

2、FileInfo    允许使用文件控制类型的指令。它们包括AddEncoding AddLanguage  AddType  DEfaultType ErrorDocument LanguagePriority 

3、Indexes     允许使用目录控制类型的指令。它们包括AddDescription  AddIcon  AddIconByEncoding AddIconByType  DefaultIcon  DirectoryIndex  FancyIndexing  HeaderName  IndexIgnore  IndexOptions ReadmeName 

4、Limit       允许使用权限控制指令。它们包括Allow Deny和Order 

5、Options     允许使用控制目录特征的指令.他们包括Options 和XBitHack 


Options 

1、All         准许以下除MultiViews以外所有功能 

2、MultiViews  允许多重内容被浏览,如果你的目录下有一个叫做foo.txt的文件,那么你可以通过/foo来访问到它,这对于一个多语言内容的站点比较有用 

3、Indexes     若该目录下无index文件,则准许显示该目录下的文件以供选择 

4、IncludesNOEXEC  准许SSI,但不可使用#exec和#include功能 

5、Includes    准许SSI 

6、FollowSymLinks  在该目录中,服务器将跟踪符号链接。注意,即使服务器跟踪符号链接,它也不会改变用来匹配不同区域的路径名,如果在<Local>;标记内设置,该选项会被忽略 

7、SymLinksIfOwnerMatch  在该目录中仅仅跟踪本站点内的链接 

8、ExecCGI     在该目录下准许使用CGI


Apache虚拟主机配置范例

<VirtualHost 127.0.0.1>
    ServerAdmin xxx@example.com
    ServerName xxx.example.com
    DocumentRoot D:/wamp/www/xxx.example.com/web
    ErrorLog "logs/xxx-error.log"
    CustomLog "logs/xxx-access.log" common
    #路径重写
    RewriteEngine on
    RewriteCond $1 !^(index\.php|/ajax|/images|/css|/scripts|/assets|/html|robots\.txt)
    RewriteCond %{REQUEST_URI} !=/favicon.ico
    RewriteRule ^(.*)$ /index.php/$1 [L]
    <Directory D:/wamp/www/xxx.example.com>
        Options Indexes FollowSymLinks Includes #包含配置
        Order Deny,Allow
        Deny from all
        Allow from all
    </Directory>
</VirtualHost>



转载于:https://my.oschina.net/Sandyguoguo/blog/548999

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值