我对理解mod_rewrite行为有疑问。 我将用一个例子来说明这一点。 我的根目录中有3个文件: .htaccess , index.php 和 test.php 。 文件内容:
的.htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.+) ?link=$1 [L]
的index.php
<?php
$db = mysqli_connect('localhost', 'root', '', 'mydb');
$db->real_query ("INSERT INTO `test` (`str`) VALUES ('test_string')");
print_r($_GET);
?>
test.php的
<?php
$db = mysqli_connect('localhost', 'root', '', 'mydb');
$db->real_query ("INSERT INTO `test` (`str`) VALUES ('another_test_string')");
print_r($_GET);
?>
因此,当我使用浏览器访问我网站的根文件夹时,会在数据库中插入两个字符串 - 'test_string'和'test_string'。如果我转到/test.php
,还会插入两个字符串 - 一个来自index.php脚本 - 'test_string',另一个来自test.php
字符串 - 'another_test_string'。如果我从.htacess中删除重写规则,则只会为两个页面插入一个字符串。我无法理解这种行为 - 为什么所有脚本都被执行两次?特别是我不明白为什么test.php
I wrote RewriteCond %{REQUEST_FILENAME} !-f
发生这种情况,所以不应该重写。
提前谢谢你。
答案 0 :(得分:2)
一旦处理完代码片段,您所拥有的php代码就会插入到数据库中。
如果多次执行,您将在数据库中看到更多插入内容。
然而,重写规则也只执行一次。
因此,您所经历的内容可能与您的重写规则完全无关。如果您不信任我,请为重写(see apace docs)启用日志记录并按照跟踪进行操作。
你可能坐在电脑前太久了,所以只需喝一杯茶,放松一下,找到那个虫子。