4

mod_rewriteの動作を理解するのに問題があります。これを例で説明します。ルートディレクトリに、.htaccessindex.phptest.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。したがって、書き換えは行わないでください。
前もって感謝します。

4

1 に答える 1

2

コードのフラグメントが処理されると、使用しているphpコードがデータベースに挿入されます。

これを複数回実行すると、データベースにさらに多くの挿入が表示されます。

ただし、書き換えルールも1回だけ実行されます。

したがって、経験することは、書き換えルールとはまったく関係がない可能性があります。私を信頼していない場合は、書き換えのログを有効にして(apace docsを参照)、トレイルに従ってください。

あなたはおそらくコンピュータの前に長く座っているので、お茶を飲んでリラックスしてそのバグを見つけてください。

于 2012-08-15T10:54:35.507 に答える