服务器端包含(SSI)注入问题

时间:2017-08-07 08:07:21

标签: html ssi server-side-includes

我在html网站上工作。我有超过30页的地方。所以我正在寻找一个解决方案,我必须在一个页面中使用菜单,然后在所有其他页面上调用该菜单,所以下次当我必须进行一些更改时,我只会更改一个文件。

通过谷歌,我想知道我可以将文件扩展名从html转换为php,然后使用<?php include 'menu.php' ?>。但我不想在这里更改扩展名。

因此出现了另一个解决方案,即服务器端包含(SSI)。

但这里似乎没有任何改变。 让我们说我的菜单div是:

<div class="menu">
    <div class="page-logo">
        <a href="dashboard.html">
            <img src="assets/img/logo.png" alt="logo"/>
        </a>
    </div>
</div>

所以我将菜单Div代码复制到单独的文件中,然后将其保存为menu.html,然后使用这样的SSI

<div class="menu">
    <!-- #include virtual="/menu.html" -->
</div>

但我的页面上没有徽标。我想知道这对其他人有什么影响,因为据我所知,SSI命令在评论标签<!-- COMMENTS -->

任何想法,上面我做错了什么或如何在保留html扩展名的所有页面上使用相同的菜单?

我使用过smi .htaccess文件

AddType text/html .shtml
AddHandler server-parsed .shtml
Options Indexes FollowSymLinks Includes
AddHandler server-parsed .html .htm

1 个答案:

答案 0 :(得分:1)

对于任何形式的服务器端编程,您需要将服务器配置为在文件中查找服务器端代码,而不是直接将其传递给客户端。

如何执行此操作取决于您使用的特定服务器。如果您使用的是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,具有以下指令:

AddType text/html .shtml
AddOutputFilter INCLUDES .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解析器不会将其视为评论。