web-dev-qa-db-ja.com

ApacheはRewriteRuleにもかかわらず末尾のスラッシュを追加します

私は単純な。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を使用しています。

3
sidyll

上記のコメントで決定されているように、DirectorySlashディレクティブはこの特定のApacheの動作を制御し、リライタルールはそれを引き起こしませんでした。このディレクティブのデフォルトはonです。 offに設定した場合、ファイルシステムのディレクトリにマップするURIが末尾のスラッシュなしで要求された場合、Apacheはリダイレクトしません末尾にスラッシュがあるものにリクエストします。

ドキュメントの詳細はこちら: https://httpd.Apache.org/docs/current/mod/mod_dir.html#directoryslash

2
Unbeliever