0

I have htaccess file which contain:

RewriteRule . index.php [L]

index.php:

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

When I opening index.php, mysql_query executes 2 times, and column Views every time increases in 2. Why?

added:

I made test.php with content:

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

this code is executing 3 times!! when I delete .htaccess everything is working properly. It's really strange...

4

2 回答 2

2

你在重写。这将匹配所有内容;CSS 和 JS 等静态文件,以及 /favicon.ico 等典型浏览器请求。

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

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

未经测试!

您可以通过让规则响应测试 URL 来检查这是否是问题,但无法查看访问日志:

RewriteRule /test/ test.php [L]

仍然未经测试!

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

于 2012-09-20T19:32:14.280 回答
0

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

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

于 2012-09-20T19:08:21.327 回答