我正在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 解析器不会将其视为注释。