【问题标题】:.htaccess for header and footer using PHP.htaccess 用于使用 PHP 的页眉和页脚
【发布时间】:2020-03-20 16:30:46
【问题描述】:

我知道我会写

php_value auto_prepend_file "/root-directory/header.php"
php_value auto_append_file "/root-directory/footer.php"

进入 .htaccess 以在每个页面的顶部和末尾包含 headerfooter,但这会将它们放在 <html><body> 标记之前/之后.

无论如何它都可以,但我知道这不是设置 html 页面的好方法。

虽然我可以通过将</body></html> 标签放在它的末尾来“修复”footer 的问题(即使每个源代码都没有结束标签并不是一件好事),我找不到修复标题的方法。

有没有办法告诉.htaccessheader 放在<body> 标记之后,将footer 放在</body> 之前?

【问题讨论】:

  • 嗯,您的应用程序逻辑需要修改,使其不发送完整的 html 文档,而只发送一个 sn-p,即 html 文档的一小部分。然后可以将不包含<html><body> 以及</body></html> 开始和结束标记的部分嵌入到自动添加的sn-ps 中以形成有效的html 文档。我仍然认为这是一种不好的做法,但这是可能的。通常的方法是在协议级别处理内容方面,而是在应用程序的逻辑控制器内部处理。
  • @arkascha 那么你的意思是我应该在每个页面中手动包含headerfooter 吗?
  • 嗯,是的,也不是。取决于“手动”和“每个”的实际含义。我不知道你的设置和你的应用程序。您如何创建内容。你在你的问题中没有这样说。我所说的是通常的方法是在应用程序的控制器中包含 html 文档的页眉和页脚部分。您提供的信息很少,我无法更具体。也许您想使用问题下方的edit 按钮并提供更多信息:您使用什么样的应用程序逻辑?你提供什么内容?什么结构?
  • 另外,如果您确实需要在协议级别进行内容处理,您可以查看 apache http 服务器提供的替代功能。设置起来有点复杂,但实际上允许用页眉和页脚 替换 那些前面和后面的 html 标记,而不仅仅是添加这些标记。 httpd.apache.org/docs/2.4/mod/mod_substitute.html
  • @arkascha 我的网站没什么好说的...我是个初学者,它是一个托管在免费域上的网站,有 20-30 页。页眉和页脚应该包含在每个页面中(除了 PHP 页面,但没关系)。我想要做的是自动包含页眉和页脚,这样我就不必在更改主机时对所有反应路径感到疯狂或调整绝对路径。当我说“手动”时,我的意思是在每个页面中使用 include ... 包含页眉和页脚。

标签: php html .htaccess include


【解决方案1】:

您也许可以将此内容分配给变量并在您的 HTML 页面中使用变量,而不是包含(听起来像)原始 HTML(或嵌入了 PHP 的 HTML)的 header.phpfooter.php 文件 - 无论您想要出现的内容。您可以将此文件称为template-variables.php,然后您只需要一个包含在auto_prepend_file 中的文件。

例如:

php_value auto_prepend_file "/root-directory/template-variables.php"

然后在template-variables.php:

<?php
// Template variables...
// (NB: Using HEREDOC <<< syntax)
$HEADER= <<<EOF
<header>
    <h1>Header goes here</h1>
    <p>More content goes here...</p>
</header>
EOF;

$FOOTER= <<<EOF
<footer>
    <p>Footer content goes here...</p>
    <p>Copyright etc.</p>
</footer>
EOF;

在您的 HTML/PHP 文档中:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- PHP: Short echo format -->
    <?=$HEADER?>

    <p>Some more content goes here...</p>

    <?=$FOOTER?>
</body>
</html>

封装你可以使用关联数组来保存你的模板变量,然后你在全局命名空间中只有一个变量。例如:

<?php
// Template variables...
$TEMPLATE_VARIABLES = [];
$TEMPLATE_VARIABLES['HEADER'] = 'Hello world';
:

然后,如果需要,您可以轻松遍历脚本中的所有“模板变量”。

【讨论】:

  • 哇!我从未听说过这种可能性...谢谢
猜你喜欢
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-12
  • 2018-02-02
  • 2017-11-07
相关资源
最近更新 更多