.htaccess会导致循环吗?

时间:2011-12-04 23:36:11

标签: .htaccess loops

我不是.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文件并直接访问它,则不会发生此问题。

我根本就没有这种行为,我希望这个星球上的任何人都这样做。 提前致谢, 汉斯

2 个答案:

答案 0 :(得分:4)

您可以阅读上一个答案:RewriteRule causes page to reload twice

在。 htaccess可以循环,甚至是无限循环,但最后只有一个服务器请求。所以这不是你的问题。检查链接是否有可能使浏览器多次发送请求的事情(发生的次数比我们通常认为的要多)。

答案 1 :(得分:3)

理论上没有,所有重写规则在执行任何文件之前都会得到处理。唯一可能导致多次调用数据库的是错误的PHP代码,可能是多次调用一行或者可能在调用后重定向页面,然后htaccess将其重定向回同一页面。单独一个htaccess文件永远不会这样做。

我不排除这种可能性,因为程序等有时可以做一些非常随机的事情,但是你需要更多地调试你的PHP代码以消除它作为源。简单的方法就是简单地完成,每当PHP做一些重要的事情时,添加一条打印行来表明它正在执行某些特定功能,特别是对于MySQL命令。这是一种快速查看页面加载所做的工作的方法。你有时会发现你会感到惊讶。

另外,查看Apache访问日志。它将为用户发送的每个GET请求打印一个新行。如果页面永远不会被重定向,则用户不可能多次运行该脚本(如上所述,在确定最终路径之前不会执行任何文件)。如果您同时看到来自同一IP的多个GET请求,则会重定向或重新加载页面。