末尾にスラッシュ( "/")を付けずにこのようなURLをリクエストしたときに、このRedirect(301)に気付いていません。 http://server/directory
サーバーは、Locationヘッダーがに位置する301 Redirect Permanentヘッダーで応答しますhttp://server/directory/
。
この実例をご覧ください:
ユーザーリクエスト:
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リンクの最後にスラッシュを追加し、いくつかのリダイレクトに対応する必要がありますか?
皆さんはどう思いますか?
index.html
リダイレクトなしで出力したい
/social
。(また、一般的に、複数のURLで同じコンテンツを提供することは通常望ましくありません。)
/social
あなたの例では、リダイレクトに代わる唯一の正解は404で応答することです。