私の知る限り、HTTP でこれを行うことはできません。HTTP でのリダイレクトとは、具体的には、クライアントが 2 番目のリクエストを送信することになっていることを意味します。
あなたが望むのは、いくつかのリソースに「正規URL」を指定し、この正規URLをブラウザのロケーションバーに表示することに似ていると思います。
RFC 6596は、<link rel="canonical">
. ただし、ブラウザが何をすべきかは指定されていません。Google はこれを使用して、インデックスに登録する URL をより適切に選択します。
タグを使用する以外に、HTTPヘッダー<link>
を介してリソース間の関係を指定することもできます。http://www.w3.org/wiki/LinkHeaderを参照してください。ただし、これがGoogleに取り上げられるかどうかはわかりません。http://support.google.com/webmasters/bin/answer.py?hl=en&answer=139394のページには、Google がサポートしているとは記載されていません。実質的にすべてのリンク タグと同じように、ブラウザはこれを無視しますが、スタイルシートは顕著な例外です。Link
Link: </better-url>; rel=canonical
問題のコンテンツが HTML ドキュメントの場合は、HTML5 履歴 APIを使用できます。具体的には、history.replaceState
メソッドを使用します。他の種類のコンテンツで同様のことを達成することは不可能だと思います。
編集
Content-Location
ヘッダーは、実際にあなたが望むものに非常にうまく適合する場合があります。HTTP 1.1 RFC のセクション 14.14 から:
Content-Location エンティティ ヘッダー フィールドは、エンティティが要求されたリソースの URI とは別の場所からアクセスできる場合に、メッセージに含まれるエンティティのリソースの場所を提供するために使用される場合があります。サーバーは、応答エンティティに対応するバリアントに Content-Location を提供する必要があります。特に、リソースに複数のエンティティが関連付けられており、それらのエンティティが実際には個別にアクセスできる個別の場所を持っている場合、サーバーは返される特定のバリアントに Content-Location を提供する必要があります。
Content-Location = "Content-Location" ":"
( absoluteURI | relativeURI )
Content-Location の値は、エンティティのベース URI も定義します。
Content-Location 値は、元の要求された URI の代わりではありません。これは、リクエスト時のこの特定のエンティティに対応するリソースの場所のステートメントにすぎません。その特定のエンティティのソースを識別したい場合、将来のリクエストは Content-Location URI を request-URI として指定してもよい (MAY)。
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
HTTP ヘッダー フィールド「Content-Location」の目的は何ですか?も参照してください。