Apache .htaccess配置错误致PHP日志重复写入问题求助
解决WAMP下AllowOverride All导致PHP脚本重复执行、错误日志重复写入的问题
可能触发问题的原因
- 浏览器自动请求
favicon.ico:现代浏览器会默认请求站点根目录的favicon.ico,如果你的.htaccess规则将所有非文件/目录的请求转发到MVC入口脚本,这个请求会被当成路由请求,触发第二次脚本执行。 - HTTP/HTTPS跳转叠加触发:如果虚拟主机配置和
.htaccess同时设置了HTTPS强制跳转,可能导致一次请求被重复处理。 - .htaccess重写规则存在循环:规则逻辑漏洞导致请求被多次重定向到入口脚本。
针对性解决方案
1. 过滤favicon.ico请求
在.htaccess中添加排除规则,避免图标请求触发入口脚本:
RewriteEngine On # 排除favicon.ico的重定向处理 RewriteCond %{REQUEST_URI} !=/favicon.ico # 仅当请求不是真实文件或目录时,转发到入口脚本 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L]
同时可以在站点根目录放置一个空的favicon.ico文件,彻底消除浏览器的404请求触发脚本的可能。
2. 统一SSL跳转配置,避免重复请求
将HTTPS强制跳转逻辑放在httpd-vhosts.conf的虚拟主机配置中,不要在.htaccess中重复设置:
<VirtualHost *:80> ServerName mydomain.local # 直接将HTTP请求永久跳转到HTTPS Redirect permanent / https://mydomain.local/ </VirtualHost> <VirtualHost *:443> ServerName mydomain.local # SSL证书配置 SSLEngine on SSLCertificateFile "C:/wamp64/ssl/cert.crt" SSLCertificateKeyFile "C:/wamp64/ssl/key.key" DocumentRoot "C:/wamp64/www/your-project-root" <Directory "C:/wamp64/www/your-project-root"> AllowOverride All Require local </Directory> </VirtualHost>
这样浏览器只会收到一次跳转指令,不会触发两次脚本执行。
3. 给错误日志添加去重逻辑
如果你的自定义错误处理函数没有去重逻辑,两次脚本执行会重复写入相同错误。可以添加静态标记避免重复:
<?php function customErrorHandler($errno, $errstr, $errfile, $errline) { // 用静态数组记录已写入的错误,避免重复 static $loggedErrors = []; $errorSignature = "$errno|$errstr|$errfile|$errline"; if (in_array($errorSignature, $loggedErrors)) { return; } $loggedErrors[] = $errorSignature; $logContent = date('Y-m-d H:i:s') . " - Error: [$errno] $errstr in $errfile on line $errline\n"; file_put_contents('logFile.txt', $logContent, FILE_APPEND); } set_error_handler("customErrorHandler"); // 测试错误 trigger_error("Test error message"); ?>
4. 验证重复请求来源
在入口脚本顶部添加请求日志,确认是哪个请求触发了二次执行:
<?php $requestLog = date('Y-m-d H:i:s') . " - Requested URI: " . $_SERVER['REQUEST_URI'] . "\n"; file_put_contents('requestTrace.txt', $requestLog, FILE_APPEND); // 后续业务逻辑 ?>
查看requestTrace.txt就能明确是favicon.ico还是其他请求导致的重复执行。
内容的提问来源于stack exchange,提问作者Miguel Almeida
相关产品推荐
相关产品推荐

