私は単純な。htaccessを使用して、PHPスクリプト:
_RewriteEngine on
RewriteRule . index.php
_
私のindex.php現時点でサーバー変数をエコーするだけです(print_r($_SERVER)
を使用)。すべてが正常に機能し、URLに何でも入力すると、index.phpの内容が表示されます。ただし、この構造を考慮すると、次のようになります。
_test/ # document root
folder/ # empty folder
index.php
.htaccess
_
_[site]/folder
_にアクセスすると、最初にブラウザが_[site]/folder/
_にリダイレクトされ、次に適切なindex.phpコンテンツが表示されることに気付きました。なんでこんなことが起こっているの?書き換えルールはすべてを「そのまま」リダイレクトすることになっているのではないですか?
これは、Webサイトをローカルでテストするように設定された仮想ホストで使用されています。最低限必要な設定がされています。 。htaccessの前に他のApacheファイルがロードされている可能性はありますか?
_<VirtualHost *:80>
ServerName test.local
DocumentRoot /Library/WebServer/Documents/test/
</VirtualHost>
_
現在OSX10.10を使用しています。
上記のコメントで決定されているように、DirectorySlash
ディレクティブはこの特定のApacheの動作を制御し、リライタルールはそれを引き起こしませんでした。このディレクティブのデフォルトはonです。 offに設定した場合、ファイルシステムのディレクトリにマップするURIが末尾のスラッシュなしで要求された場合、Apacheはリダイレクトしません末尾にスラッシュがあるものにリクエストします。
ドキュメントの詳細はこちら: https://httpd.Apache.org/docs/current/mod/mod_dir.html#directoryslash