我以前问过这个问题,我得到了几个负分数,但这次我问得更清楚。
我在一个网站上有这样一个结构:
- 主页(所有资源和脚本都在本页)
- 所有其他页面(HTML只包含该特定页面的元素)
如果用户点击主页面锚定到其他页面,则嵌入On click event
的AJAX函数将运行,并且URL地址将使用Window.history.PushState
更改。
问题是我们能做什么,如果用户输入其他页面的URL,而不是点击锚?例如,用户输入:http://example.com/pages/about然后只加载该页面的元素,而不需要mainpage的资源和脚本。
我想到了这样一个解决方案:
- 检测用户是否输入URL而不是点击锚。(检测HTTP请求)
- 如果是HTTP请求,则加载包含在主页中的资源。
这个解决方案可以在客户端(javascript)的方式?我也懂一点PHP。
看一下Cloudflare面板,看看我是什么意思:https://www.cloudflare.com/a/overview
我做了一点研究(感谢评论),这是我首选的解决方案。我不想改变标记,所以模板引擎不是我的选择。
1。写这个PHP脚本,保存在一个PHP文件中。
<?php
/* Detect AJAX */
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
/* If it is AJAX do this */
}
else {
/* If it is not AJAX do this; In my case I did echo all scripts and resources that I wanted to be in AJAX addresses */
echo '
<script src="example.js"></script>
';
}
2。链接上面的PHP脚本文件的页面,有AJAX和HTTP请求。在我的例子中,我把它放在所有其他页面而不是主页。
<?php include "../script.php"; ?>
3。配置您的web服务器以支持HTML文件扩展名中的PHP脚本。我的web服务器是Apache,所以我在。htaccess文件中写了这一行。
AddType application/x-httpd-php .htm .html