我不是.htaccess的英雄,但我遇到的问题我认为可能是由它造成的。 第一个症状:我的数据库的简单更改(如用户IP跟踪)每次请求多次完成,而网站的输出看起来很好。
经过几个小时的追踪问题,我终于得出结论,这不是由数据库本身(100%肯定)引起的,也不是由我写的极其简单的PHP代码(也是100%肯定)引起的。 不过,问题出现在不同的服务器上。我唯一的结论是它与我的.htaccess文件有关。 对我来说,似乎每次请求在实际导致输出的运行之前都会被处理几次。
在我的public_html文件夹中,我放置了以下.htaccess文件,该文件应该将每个请求重定向到“公共”文件夹:
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ public/ [L] RewriteRule (.*) public/$1 [L] </IfModule>
在那个“公共”文件夹中,我有另一个.htaccess文件:
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?requestedurl=$1 [PT,L] </IfModule>
此文件旨在使用index.php文件处理每个请求。 注意:如果我重命名index.php文件并直接访问它,则不会发生此问题。
我根本就没有这种行为,我希望这个星球上的任何人都这样做。 提前致谢, 汉斯
答案 0 :(得分:4)
您可以阅读上一个答案:RewriteRule causes page to reload twice
在。 htaccess可以循环,甚至是无限循环,但最后只有一个服务器请求。所以这不是你的问题。检查链接是否有可能使浏览器多次发送请求的事情(发生的次数比我们通常认为的要多)。
答案 1 :(得分:3)
理论上没有,所有重写规则在执行任何文件之前都会得到处理。唯一可能导致多次调用数据库的是错误的PHP代码,可能是多次调用一行或者可能在调用后重定向页面,然后htaccess将其重定向回同一页面。单独一个htaccess文件永远不会这样做。
我不排除这种可能性,因为程序等有时可以做一些非常随机的事情,但是你需要更多地调试你的PHP代码以消除它作为源。简单的方法就是简单地完成,每当PHP做一些重要的事情时,添加一条打印行来表明它正在执行某些特定功能,特别是对于MySQL命令。这是一种快速查看页面加载所做的工作的方法。你有时会发现你会感到惊讶。
另外,查看Apache访问日志。它将为用户发送的每个GET请求打印一个新行。如果页面永远不会被重定向,则用户不可能多次运行该脚本(如上所述,在确定最终路径之前不会执行任何文件)。如果您同时看到来自同一IP的多个GET请求,则会重定向或重新加载页面。