.htaccess会导致循环吗?

Mr.*_*r.H 5 .htaccess loops

我不是.htaccess的英雄,但我遇到的问题可能是由它引起的。第一个症状:对我的数据库的简单更改(例如用户IP跟踪)在每个请求中进行了多次,而站点的输出看起来还不错。

经过数小时的追踪,我终于得出结论,这不是由数据库本身(100%确定)引起的,也不是由我编写的极其简单的PHP代码(也100%确定)引起的。仍然,问题发生在不同的服务器上。我唯一的结论是,它与我的.htaccess文件有关。对我来说,似乎每个请求在实际导致输出的运行之前都要处理几次。

在我的public_html文件夹中,放置了以下.htaccess文件,该文件应将每个请求重定向到“公共”文件夹:

    <IfModule mod_rewrite.c>
        在RewriteEngine上
        RewriteRule ^ $ public / [L]
        RewriteRule(。*)public / $ 1 [L]
    </ IfModule>

在该“公共”文件夹中,我还有另一个.htaccess文件:

    <IfModule mod_rewrite.c>
        RewriteEngine开
        RewriteCond%{REQUEST_FILENAME}!-f
        RewriteCond%{REQUEST_FILENAME}!-d
        RewriteRule ^(。*)$ index.php?requestedurl = $ 1 [PT,L]
    </ IfModule>

该文件旨在使用index.php文件处理每个请求。注意:如果我重命名index.php文件并直接访问它,则不会发生此问题。

我根本没有这种行为,我希望这个星球上的任何人都能做到。预先感谢,汉斯

ani*_*son 3

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

我不会排除这种可能性,因为程序等有时会做一些非常随机的事情,但您需要更多地调试 PHP 代码,以消除它作为源代码。简单的方法是简单地遍历一遍,每次 PHP 执行一些主要操作时,添加一个打印行来指示它正在执行某些特定功能,尤其是对于 MySQL 命令。这是查看页面加载过程的快速方法。有时你可能会对你的发现感到惊讶。

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