我在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
答案 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解析器不会将其视为评论。