web-dev-qa-db-ja.com

リファラーを保持するためにApache301リダイレクトを作成するにはどうすればよいですか?

Httpd.confファイルにApache301リダイレクトがあり、正規化の目的ですべてのトラフィックを単一のドメインにリダイレクトします。最近、このリダイレクトがヘッダーにリファラーを保持していないことに気付きました。 RFC2616 は、リファラーの保持がリダイレクトでオプションであることを示しているようで、HTTPとHTTPSの間を通過するときに実際にリファラーに対してアドバイスします。

ただし、他の questions で、単純なApache 301リダイレクトがリファラーを保持していることを発見しました。これは、通常、デフォルトで当てはまるようです。リファラーを維持するために私が遊ぶことができるこの動作に影響を与える可能性のある他のいくつかの要因は何ですか? Apacheサーバーのバージョンやクライアントのブラウザ設定(つまり、私の制御外)に基づく唯一の要因はありますか?

私のリダイレクト:

ServerAlias www.example.com sub1.example.com   

## Redirect all sub-domains to www
RewriteCond %{HTTP_Host} !^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com$1 [R=301,L]

上記の書き換えルールに関して、私はhttp://sub1.example.comにアクセスしています。私は現在、これを理解できるまで、単純化のためにHTTPを使用しています。

リファラーが引き継がれていないと判断する方法は、開発者ツールを開いた状態でブラウザーを介してリダイレクトされたサイトに手動でアクセスすることです。また、受信ページのPHPの$_SERVERグローバルにリファラーが含まれていないことも確認しました。リダイレクトが1つだけ発生していることを確認できます。サーバーサイド言語はPHPです。

最初のページ(sub1.example.com)のリクエストヘッダーは次のとおりです。

GET / HTTP/1.1
Host: sub1.example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8

最初のページ(sub1.example.com)の応答ヘッダーは次のとおりです。

HTTP/1.1 301 Moved Permanently
Date: Wed, 04 Oct 2017 18:14:34 GMT
Server: Apache
Upgrade-Insecure-Requests: 0
Location: http://www.example.com/
Cache-Control: max-age=1
Expires: Wed, 04 Oct 2017 18:14:35 GMT
Content-Length: 243
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

受信ページ(www.example.com)のリクエストヘッダーは次のとおりです。

GET / HTTP/1.1
Host: www.example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8
Cookie: <redacted>

受信ページ(www.example.com)の応答ヘッダー:

HTTP/1.1 200 OK
Date: Wed, 04 Oct 2017 18:14:34 GMT
Server: Apache
Upgrade-Insecure-Requests: 0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
2
d.lanza38

リダイレクト(301など)は、単に「リクエストを再送信しますが、今回はfoo.comを使用します」という応答をクライアント(ユーザーのブラウザ)に送り返します。クライアントが再送信することを選択した場合、それは実行され、要求をどのように作成するかは完全にクライアント次第です。サーバー側にはアクションがないため、リファラーの包含に影響を与えることはできません。

4
Colt