服务器端包含(SSI)注入问题
我在html网站上工作。我有超过30页的地方。所以我正在寻找一个解决方案,我必须在一个页面中使用菜单,然后在所有其他页面上调用该菜单,所以下一次当我必须进行一些更改时,我将只更改一个文件。服务器端包含(SSI)注入问题
通过谷歌,我知道我可以将我的文件扩展名从html
转换为php
,然后使用<?php include 'menu.php' ?>
。但我不想在这里改变扩展名。
因此,另一个解决方案是服务器端包含(SSI)。
但这里没有什么改变。 比方说我的菜单股利是:
<div class="menu">
<div class="page-logo">
<a href="dashboard.html">
<img src="assets/img/logo.png" alt="logo"/>
</a>
</div>
</div>
所以我在不同的文件中复制的菜单股利代码并保存为menu.html然后使用SSI这样
<div class="menu">
<!-- #include virtual="/menu.html" -->
</div>
但标志不appers在我的页面上。我不知道这是如何工作对其他的人,因为据我所知道的SSI指令是注释标签<!-- COMMENTS -->
任何想法,我在做什么错高于或我如何可以使用相同的菜单上的所有页面保存HTML扩展?
我用THI SMY .htaccess
文件
AddType text/html .shtml
AddHandler server-parsed .shtml
Options Indexes FollowSymLinks Includes
AddHandler server-parsed .html .htm
对于任何形式的服务器端编程,你需要配置服务器,以寻找在你的文件服务器端的代码,而不是仅仅将其传递直接到客户。
你如何做到这一点取决于你使用的特定服务器。如果您使用的是Apache HTTPD,那么您通常可以使用.htaccess
。这是not recommended:
如果您有权访问httpd主服务器配置文件,则应该避免完全使用.htaccess文件。使用.htaccess文件会降低您的Apache http服务器速度。您可以包含在.htaccess文件中的任何指令在目录块中设置得更好,因为它具有相同的效果并具有更好的性能。
发现服务器配置为寻找.php
文件中的PHP和.shtml
文件中的SSI是非常常见的。
您可以将它们配置为查看其他类型的文件,并开始查看它们是否已经存在。
如何做到这一点的具体情况将取决于您使用哪个Web服务器。对于Apache,例如,the manual has this guide for SSI
要允许服务器SSI,必须具备以下指令 无论是在你的httpd.conf文件或.htaccess文件:
Options +Includes
这告诉Apache您想要为SSI 指令解析文件。请注意,大多数配置包含可以相互覆盖的多个选项 指令。您可能需要 将选项应用于您希望启用SSI的特定目录 以确保最后得到评估。
不仅仅是为SSI指令解析任何文件。你必须告诉 Apache应该解析哪些文件。有两种方法可以做到这一点。 你可以告诉Apache解析带有特定文件 扩展名,如任何的.shtml文件,以下指令:
一个缺点这种方法是,如果你想增加SSI指令 到现有页面,您必须更改该页面的名称以及该页面的所有链接,以便为其添加.shtml 扩展名,以便执行这些伪指令。
另一种方法是使用XBitHack指令:如果他们有 设置执行位
XBitHack on
XBitHack告诉Apache解析文件SSI指令。因此,要将SSI指令添加到现有页面 而不是必须更改文件名,您只需要 使用chmod使文件成为可执行文件。
chmod +x pagename.html
关于不该做什么的简短评论。您偶尔会看到人们建议您只告诉Apache解析所有.html文件以获取 SSI,这样您就不必混淆.shtml文件名。这些 人可能没有听说过XBitHack。要记住 的一点是,通过这样做,你需要Apache读取通过 发送给客户端的每个文件,即使它们不包含任何SSI指令。这可能会减慢速度, 不是一个好主意。
...和the PHP manual has this guide:
# Make all PHP code look like HTML AddType application/x-httpd-php .htm .html
,据我所知道的SSI指令是注释标签
<!-- COMMENTS -->
SSI语法设计米不正确的HTML注释语法,以便如果服务器无法解析SSI文件,则回退位置将默默失败,而不是破坏页面的其余内容。
SSI解析器不会将其视为注释。