要重新评估标题,如果我在浏览器中转到localhost/
,页面会按照您的预期加载,加载我尝试投放的任何内容都会按照我的意愿完成,但我注意到了使用 XDEBUG (这只是PHP的调试软件,用于监视调用的函数以及加载的文件)进行调试时的奇怪之处 - 单个加载有两个日志。
他们将整个应用程序加载两次,就好像加载了浏览器请求的页面一样,然后服务器决定第二次加载它,以获得乐趣!
这是我在加载页面时讨论的两个日志文件,使用Webgrind
进行分析。
.favicon
是谷歌浏览器试图检索每个加载的图标,我知道这将加载网站第三次,但我使用非法网址管理器阻止应用程序运行时看到URI /favicon.ico
的{{1}},所以应用程序现在只运行两次。
这是我目前用来操纵网址的.htaccess
:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|robots\.txt)
DirectoryIndex index.php
RewriteRule ^(.*)$ index.php?/$1 [L]
我的access.log
来自 apache :
::1 - - [09/Jan/2017:23:57:27 -0800] "GET / HTTP/1.1" 200 1597 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.51 Safari/537.36"
::1 - - [09/Jan/2017:23:57:28 -0800] "GET / HTTP/1.1" 200 1597 "http://localhost/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.51 Safari/537.36"
谢谢!
答案 0 :(得分:0)
在我完成整个应用程序的调试之后(将SESSION记录器放在index.php页面,然后稍后修改SESSION值并查看所请求的内容),使用我index.php
页面上的以下代码:
if (!isset($_SESSION['logs']) $_SESSION['logs'] = [];
array_push($_SESSION['logs'], [
'ip' => $_SERVER['REMOTE_ADDR'],
'ua' => $_SERVER['HTTP_USER_AGENT'],
'uri' => $_SERVER['REQUEST_URI'],
'tim' => time()
]);
(稍后使用print/echo "<pre>", print_r($_SESSION['logs']) ,"</pre>";
查看)
我可以看到除了奇怪的
之外所有的日志都是一样的'uri' => '/favicon.ico'
表示Google Chrome正在从我的应用中请求favicon.ico
,因此我设置了一个临时
if ($_SERVER['REQUEST_URI'] === '/favicon.ico') exit;
只是为了阻止该请求,并尝试将记录器降低到一个应用程序负载。
将请求限制为2(两个localhost/
)之后,我查看了我的access.log
文件,该文件显示了两个SAME请求,但有一个请求是localhost/
和另一个是-
(-
= undefined
来记录),所以经过24小时的调试后,我记得我之前查看过的Chrome开发工具显示了所有网络连接;
Chrome开发工具显示两次调用localhost
,我觉得这很奇怪,但发起人是jQuery
(当时我不知道$.get
AJAX请求被计为一个jQuery
发起人,所以我忽略了查看它,直到最近我才意识到我在加载页面时加载了一个方法,它将在GET中请求当前的window.location.hash
$.get( window.location.hash.substring(3), function(body) {} );
请求(加载localhost/
时)... localhost/
,因为页面中没有hash
部分。
所有这一切都归结为有自动加载器,但我检查了整个应用程序中的每个img
标记和link rel
/ script
标记(200k行代码)。
希望这有助于你们任何人!他花了很多时间来解决这个问题。 (抱歉英语不好,凌晨2点)