如何在不将Html更改为sHtml的情况下包含其他代码(菜单栏或侧栏)

时间:2013-01-08 21:55:08

标签: html include ssi

我想在多个网页中包含标题所以我想创建一个文件并包含在所有页面中。我找到的一种方法是通过SSI(服务器端包括),但它需要将网页的扩展从Html更改为sHtml(由于某些限制我无法做到)。

有没有办法在不改变扩展名的情况下做到这一点?

3 个答案:

答案 0 :(得分:0)

上次我用Apache检查过(几年前),如果你通过httpd进程使html文件可执行,它们就会像shtml一样,而不必重命名。

我将这样做的安全隐患留给您自己的评估。

答案 1 :(得分:0)

您可以使用jQuery / AJAX方法

$.get('ajax/test.html', function(data) {
$('.result').html(data);
alert('Load was performed.');
});

参考:http://api.jquery.com/jQuery.get/

答案 2 :(得分:0)

您最好的方法是带有包含的PHP文件。 SSI运行良好,但您必须拥有.shtml文件。

非推荐的方法是使用iframe来包含标头。也可以使用Javascript,但使用客户端包含不好。 jQuery也将是客户端包含。

您可以设置.html文件以使用SSI,但如果您有限制,这很可能是您无法通过的限制。托管服务器帐户大部分都不允许这样做。

SSI上的Apache Server文档。 http://httpd.apache.org/docs/current/howto/ssi.html

要在服务器上允许SSI,您必须在httpd.conf文件或.htaccess文件中包含以下指令:

选项+包含 这告诉Apache您希望允许为SSI指令解析文件。请注意,大多数配置包含多个可以互相覆盖的Options指令。您可能需要将选项应用于您希望启用SSI的特定目录,以确保它最后得到评估。

不仅为SSI指令解析任何文件。你必须告诉Apache应该解析哪些文件。有两种方法可以做到这一点。您可以告诉Apache使用以下指令解析具有特定文件扩展名的任何文件,例如.shtml:

AddType text / html .shtml AddOutputFilter包含.shtml 这种方法的一个缺点是,如果要将SSI指令添加到现有页面,则必须更改该页面的名称以及指向该页面的所有链接,以便为其提供.shtml扩展名,以便指令将被执行。

另一种方法是使用XBitHack指令:

XBitHack on 如果设置了执行位,XBitHack会告诉Apache解析SSI指令的文件。因此,要将SSI指令添加到现有页面,而不是必须更改文件名,您只需要使用chmod使文件可执行。

chmod + x pagename.html 关于什么不该做的简短评论。你偶尔会看到人们建议你告诉Apache解析SSI的所有.html文件,这样你就不必乱用.shtml文件名了。这些人可能没有听说过XBitHack。要记住的是,通过这样做,您需要Apache读取它发送给客户端的每个文件,即使它们不包含任何SSI指令。 这可能会使事情变得缓慢,并且不是一个好主意。