mod_rewriteの動作を理解するのに問題があります。これを例で説明します。ルートディレクトリに、.htaccess、index.php、test.phpの3つのファイルがあります。ファイルの内容:
.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」の2つの文字列が挿入されます。に移動すると/test.php
、2つの文字列も挿入されます。1つはindex.phpスクリプトから-'test_string'で、もう1つはtest.php
文字列から-'another_test_string'です。.htacessから書き換えルールを削除すると、両方のページに1つの文字列のみが挿入されます。そのような動作を理解できません-なぜすべてのスクリプトが2回実行されるのですか?test.php
特に、なぜこれが発生するのかわかりませんI wrote RewriteCond %{REQUEST_FILENAME} !-f
。したがって、書き換えは行わないでください。
前もって感謝します。