我有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时一切正常。真的很奇怪......
答案 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]
规则添加限制条件,以便它只加载一次。