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



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

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

因此,出现了另一种解决方案,即服务器端包含(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 代码复制到单独的文件中并将其另存为菜单.html然后像这样使用 SSI

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

但是徽标在我的页面上不适用。我想知道这对其他人是如何工作的,因为据我所知,SSI 命令在评论标签中<!-- COMMENTS -->

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

我已经使用了这个 smy.htaccess文件

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

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

如何执行此操作取决于您使用的特定服务器。如果您使用的是Apache HTTPD,那么您通常可以使用.htaccess。不建议这样做:

如果您有权访问 httpd 主服务器配置文件,则应完全避免使用 .htaccess 文件。使用 .htaccess 文件会减慢您的 Apache http 服务器的速度。您可以包含在 .htaccess 文件中的任何指令最好在目录块中设置,因为它将具有相同的效果和更好的性能。

发现服务器配置为在.php文件中查找PHP并在.shtml文件中查找SSI是很常见的。

您可以将它们配置为查找其他类型的文件,如果它们尚未查找,则开始查找。

如何执行此操作的细节将取决于您使用的Web服务器。例如,对于Apache,手册中有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 指令。这会减慢速度,并且 不是一个好主意。

。PHP 手册有这样的指南:

# Make all PHP code look like HTML
AddType application/x-httpd-php .htm .html

我所知,SSI命令在评论标签中<!-- COMMENTS -->

SSI 语法旨在镜像 HTML 注释语法,因此,如果服务器无法解析 SSI 的文件,则回退位置将是静默失败,而不是破坏页面的其余内容。

SSI 解析器不会将其视为注释。

相关内容

  • 没有找到相关文章

最新更新