为什么PHP代码在一个请求中同时在两个文件中执行?

为什么PHP代码在一个请求中同时在两个文件中执行?,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,我花了一整天的时间调试一个问题,归结起来就是这种行为。这对我来说毫无意义 我有两个文件index.php和session_plus.php 两者都只是为每个请求增加一个会话变量 当我添加带有重写的.htaccess文件时 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d Rewri

我花了一整天的时间调试一个问题,归结起来就是这种行为。这对我来说毫无意义

我有两个文件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>

重新启动发动机
重写基/
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
点击session_plus.php,session变量将递增两次。一次是index.php,另一次是session_plus.php。当我删除.htaccess文件时,请求会按预期增加一次

我以为
重写cond%{REQUEST\u FILENAME}-f
规则将使请求完全绕过index.php

有人能解释一下这里发生了什么吗

以下是示例:

这是我的代码:

这可能并非如您所想的那样只是一个请求

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


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

可能是您的路由器
index.php
在内部使用了
session\u plus.php
,例如包括它吗?您应该能够很容易地调试它……这可能并不像您所想的那样只是一个请求。更可能的情况是,它类似于浏览器自动请求
/favicon.ico
(默认情况下通常是这样的)-如果您一开始没有上传这样的图标文件,那么这个请求当然会被路由到index.php。使用浏览器开发工具、网络面板,检查实际发生的请求。@CBroe这正是正在发生的。我在控制台中看到了favicon.ico请求,但我从未想到,由于重写,它会命中index.php。将favicon.ico添加到根目录将解决此问题,会话变量将按预期增加1。让我知道,如果你想促进你的意见,以一个答案,我会接受它。谢谢,很高兴。