Webサーバーにファイルがあり、同じパスのルールを.htaccess
に書き換えるたびに、ルールは無視され、ファイルは自動的に配信されます。ファイルが.htaccessルールの代わりに最初に照合されています
<?php
echo "hello ".$_GET['action']
?>
最初は私の.htaccess
が空と予想されるようにhello world
http://<domain-name>/test.php?action=world
エコーを訪問している次のようtest.php
を -
は、私は私のウェブサーバのpublic_html
で唯一つのファイルを持っています。また、私のウェブホストは、/test?action=world
(空の.htaccess
)を訪れてもこんにちはの世界をエコーするように設定されています。
今、私はpublic_html
で、次の.htaccess
を追加します。
RewriteEngine On
RewriteRule ^test/(\w+)$ test.php?action=$1 [NC,L]
私は/test/world
を訪問するhello world
をエコーしますが、それが起こらないことを期待して!私は応答にhello
しか得ません。今私の当初mod_rewrite
が有効になっていないことを、私は変更することをテストしていると思った.htaccess
に:/testmod/world
を訪問し、私の驚きに
RewriteEngine On
RewriteRule ^testmod/(\w+)$ test.php?action=$1 [NC,L]
が実際にhello world
をエコー!これは実際にmod_rewrite
が利用可能であることを示しており、要求されたURLに対してファイルが実際に存在するときに書き換えルールが無視されることを確認します。
私の考え方は、Apacheが.htaccess
のルールを通過し、要求されたルールと一致する書き換えルールの場合、内部でルールに指定されたパスにリダイレクトされるということです。しかし、それはここで起こります。最初に、要求されたURLのファイルが存在するかどうかをチェックし、存在しない場合は、書き換えルールを調べます。それとも、まったく別の何かが私のウェブホストの設定のためにここで起こっていますか? (参考、私はウェブホストとしてBluehostを使用しています)。
クール!私はBluehostが 'MultiViews'を有効にしていることを理解しています(これはデフォルトの動作ではないため)。これは書き換えルールよりも優先されます。これは、質問に記載されている動作を説明しています。また、それを無効にしてから、書き換えルールが存在するファイルよりも優先されることを確認しました。 –