Php文件使用htaccess重定向执行2次

时间:2012-09-20 19:01:43

标签: php .htaccess

我有htaccess文件,其中包含:

RewriteRule . index.php [L]

的index.php:

mysql_query("UPDATE users SET Views = Views + 1 WHERE SteamID = '" . mysql_real_escape_string($steamid) . "'", $db);

当我打开index.php时,mysql_query执行2次,每次列视图增加2。 为什么呢?

加入:

我用内容制作了test.php:

<?
$db = mysql_connect('localhost', '****', '******');
mysql_select_db("*****", $db);
mysql_query("UPDATE users SET Views = Views + 1 WHERE SteamID = '76561198037192367'", $db);
?>
loaded

此代码执行3次!! 当我删除.htaccess时一切正常。真的很奇怪......

2 个答案:

答案 0 :(得分:2)

你正在改写。这将匹配一切;静态文件,如CSS和JS,以及典型的浏览器请求,如/favicon.ico。

尝试添加RewriteCond以防止规则与现有文件匹配:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]

未测试!

您可以通过让规则响应测试网址来检查是否存在此问题,而无法查看访问日志:

RewriteRule /test/ test.php [L]

尚未经过测试!

日志文件的替代方案可能是开发工具,如Firebug,它可以让您查看浏览器发出的所有请求。

答案 1 :(得分:0)

规则不直接导致index.php文件加载两次。 index.php中可能存在某些内容,或者返回的HTML内容,这会使浏览器加载规则正在捕获并重写回index.php的内容(如图像,脚本,样式等?)。这样,当您在浏览器中加载路由到index.php时,index.php实际上会运行两次。

您要么必须修改index.php输出的HTML内容,修改index.php脚本,以便只在请求特定_SERVER['REQUEST_URI']时执行查询,或者为RewriteRule . index.php [L]规则添加限制条件,以便它只加载一次。