我对理解 mod_rewrite 行为有疑问。我将用一个例子来说明这一点。我的根目录中有 3 个文件:.htaccess、index.php和test.php。文件内容:
.htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.+) ?link=$1 [L]
索引.php
<?php
$db = mysqli_connect('localhost', 'root', '', 'mydb');
$db->real_query ("INSERT INTO `test` (`str`) VALUES ('test_string')");
print_r($_GET);
?>
测试.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
since I wrote RewriteCond %{REQUEST_FILENAME} !-f
,所以不应该进行重写。
先感谢您。