htaccess -FallbackResource奇怪的行为

时间:2014-03-25 17:39:49

标签: php html .htaccess

在测试一些编程时,我发现htaccess -fallbackresource与我的php代码一起演示了一些奇怪的行为。

我有一个包含以下代码的htaccess文件:

FallbackResource index.php

我还有一个包含以下代码的php文件:

<?php
session_start();
if (isset ($_SESSION['times_visited'])){
    $_SESSION['times_visited']++;
}
else{
    $_SESSION['times_visited'] = 1;
}

?>
<html>
<head>
        <link rel='stylesheet' type='text/css' href='not_existing.css'>
        <script href='not_existing.js'></script>
</head>
<body>
<p>You visited this page <?php echo $_SESSION['times_visited'];?> times</p>
</body>
</html>

磁盘上不存在.css和.js文件。

当我第一次运行php时,它输出:

You visited this page 1 times

当我刷新页面时,我得到:

You visited this page 3 times

每次刷新页面后,计数器不会上升1,而是上升2!

当我删除脚本标记时,计数器仍然会增加两个。 当我删除链接标记时,计数器会上升一个。

当我添加另外五个链接标签时,计数器会增加5 当我添加另外五个脚本标签时,计数器只会增加一个。

最初的问题是在一个更大的程序中,所以我花了一些时间来弄清楚发生了什么。 最后,我发现link-tag中的不存在的文件激活了fallbackresource,导致index.php运行一段额外的时间。

我无法弄清楚为什么link-tag和script-tag表现不同?

1 个答案:

答案 0 :(得分:0)

由于href没有<script>属性,因此未加载脚本,您可能需要src。这就是为什么您的<script>代码似乎什么都不做的原因。除此之外,您可能会看到另外一个异常现象。

<?php ?>内容在服务器上呈现。这种情况发生在之前浏览器甚至获取页面的内容,这是之前的,浏览器知道甚至加载<link><script>标签中的内容。

从技术上讲,您可能会看到之前页面加载的计数。你确定这样的事情没有发生吗?

  1. visits = 0
  2. 加载index.php,会话开始,访问次数= 1
  3. 浏览器呈现页面,看到访问次数= 1,加载1个不存在的链接,访问次数= 2
  4. load index.php,visits = 3
  5. 浏览器呈现页面,看到访问次数= 3,加载1个不存在的链接,访问次数= 4