2017-08-07 57 views
0

我在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 

回答

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文件,以下指令:

​​

一个缺点这种方法是,如果你想增加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解析器不会将其视为注释。