首页 > 解决方案 > 为什么 PHP 代码在一个请求中在两个文件中执行?

问题描述

我花了一整天的时间调试一个归结为这种行为的问题。这对我来说没有意义。

我有 2 个文件 index.php 和 session_plus.php。

两者都只是为每个请求将会话变量加一。

当我添加一个带有重写的 .htaccess 文件时......

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

并点击 session_plus.php 会话变量增加两次。一次是 index.php,另一次是 session_plus.php。当我删除 .htaccess 文件时,请求会按预期增加一次。

我认为该RewriteCond %{REQUEST_FILENAME} !-f规则会使请求完全绕过 index.php。

有人可以解释一下这里发生了什么吗?

这是示例:http: //0image.net/

这是我的代码: https ://github.com/websitedesignby/0image.net

标签: php.htaccessmod-rewrite

解决方案


如您所想,这实际上可能不仅仅是一个请求。

更有可能的是,它类似于浏览器自动发出请求/favicon.ico(默认情况下通常会这样做) - 如果您没有上传这样的图标文件,那么这个请求当然会被路由到您index.php的这种情况,由于您配置的重写。

浏览器开发工具的网络面板总是有助于检查实际发生的请求。


推荐阅读