最後にスラッシュ( "/")なしで次のようなURLをリクエストしたときに、このRedirect(301)に気づきませんでした:_http://server/directory
_
サーバーは、_http://server/directory/
_に配置されるLocationヘッダーを含む301 Redirect Permanentヘッダーで応答します。
このライブの例をご覧ください:
ユーザーリクエスト:
_GET /social HTTP/1.1
( http://192.168.1.111/social )
_
Apacheサーバーの応答:
_HTTP/1.1 301 Moved Permanently
Location: http://192.168.1.111/social/
_
ユーザーリクエスト:
_GET /social/ HTTP/1.1
( http://192.168.1.111/social/ )
_
Apacheサーバーの応答:
_HTTP/1.1 200 OK
_
Apache access.log:
_192.168.1.130 - - [05/Apr/2014:22:06:47 +0200] "GET /social HTTP/1.1" 301 558 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0"
-
192.168.1.130 - - [05/Apr/2014:22:06:47 +0200] "GET /social/ HTTP/1.1" 200 942 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0"
_
/ social /ディレクトリには_index.html
_ファイルが含まれています。
Apacheソフトウェア:Apache/2.2.22 (Ubuntu)
ディレクトリオプション:_Options Indexes FollowSymLinks MultiViews
_
だから、私の質問は:なぜApacheはこれをしているのですか?そして、リダイレクトを防ぎ、_index.html
_を直接送信する方法は?クライアントは2つの要求を送信する必要がありますが、これは本当に不要です。また、一部のクライアントはリダイレクトを許可しておらず、末尾のスラッシュ( "/")がないとサイトにアクセスできません。
リダイレクトを無効にしたくない。サーバーはリダイレクトせずに直接応答を送信する必要はありません。 _/social
_をリクエストする場合でも。
Apacheはそれらのリクエストをリダイレクトするように設計されていますか?サーバーはリダイレクトせずにデータを送信できますよね?これを防ぐために_mod_rewrite
_を使用する必要がありますか?または別の構成?それとも、このようにして、すべてのHTMLリンクの最後にスラッシュを追加して、いくつかのリダイレクトを実行する必要がありますか?
皆さんはどう思いますか?
リダイレクトなしでデータを送信すると、相対リンクが壊れます。 http://server/directory
にfile
が含まれている場合、その完全なURLはhttp://server/directory/file
になります。 <a href="file">
のように指定されたリンクは、ベースURLがhttp://server/directory/file
の場合はhttp://server/directory/
を指しますが、ベースURLがhttp://server/directory
のみの場合はhttp://server/file
を指します。 、これは意図した結果ではありません。
Apacheは、リダイレクトする代わりに、URLに応じて2つの異なる方法でディレクトリリストを生成することができます。ただし、ディレクトリにindex.html
ファイルがある場合は機能しません。したがって、代わりにApacheは両方のケースで機能するアプローチを使用しています。
これは新しい動作ではありません。10年前、Apacheは同じように動作していました。リダイレクトを処理できないクライアントは、今までに修正されているはずです。ただし、リダイレクトを処理できないクライアントの場合、Apacheは代わりにたどることができるリンクを含む小さなhtmlファイルを送信する必要があります。
mod_dir
はこのリダイレクトを追加します。 DirectorySlash Off
ディレクティブ。
ただし、末尾のスラッシュリダイレクトを無効にすると、一部のページが壊れる可能性があることに注意してください。返されるページに相対リンクが含まれている場合、末尾のスラッシュなしでページが提供されると、それらのURLの解決方法が異なります。