我的页面有2个部分,标题和内容。为了不重新加载导航中的标头,我使用Ajax从引用点击链接的页面获取html内容。同时,我使用htaccess将所有内容重定向到index.php文件,因此我可以控制每个请求并验证相同,返回html内容。问题是:当我第一次访问该页面时,我将标题放在模板中。然后,我单击一个链接,因为htaccess规则,所以Ajax被调用并重定向到index.php。但是,在该调用中,还返回了内容和标头。所以我在索引页中有一个索引页,并且标题是重复的。试图知道何时已加载标头而不再次加载它,我尝试使用会话,但是我不知道如何知道何时真正加载标头。出于安全原因,我不想使用客户端的任何信息(例如标头)。
index.php
<?php
session_start();
if(!isset($_SESSION["header_already_loaded"])){
$_SESSION["header_already_loaded"] = true;
require_once "header.html";
}
$routes = array(
"/" => "home.html",
"/profile" => "profile.html",
"/config" => "config.html"
);
$uri = $_SERVER["REQUEST_URI"];
$file = isset($routes[$uri]) ? $routes[$uri] : $routes["/"];
echo '<div id="content">';
require_once $file;
echo '</div>';
?>
header.html
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).on('click', "a", function(e){
$.ajax({
async: false,
url: this.pathname,
type: 'post',
success: function(ret) {
$("#content").html(ret);
}
});
return false;
});
</script>
<style>
#content{
border: 1px solid black;
}
</style>
<div id="header">
<a href="/">Home</a>
<a href="/profile">Profile</a>
<a href="/config">Configurations</a>
</div>
htaccess:
DirectorySlash Off
RewriteEngine On
RewriteRule ^(.*)$ index.php [L]