XREA サーバで 301 リダイレクトを知らせるための .htaccess 設定

コレまで自分が使っていた http://neo.s21.xrea.com/ という XREA の URL に、https://neos21.net/ という独自ドメインを割り当てた。同じ /public_html/ 配下のリソースをレスポンスしていたので、

どちらの URL にアクセスしても、それぞれで 200 がレスポンスされていた。

link 要素で Canonical を指定して URL 正規化を図ってはいるのだが、どうも違和感があるので、.htaccess を使って明確に 301 リダイレクトをレスポンスするようにしてみた。

リクエストされたドメインが neo.s21.xrea.com の場合だけ .htaccess からリダイレクトさせるために、次のように記述する。

# Redirect
<If "%{HTTP_HOST} == 'neo.s21.xrea.com'">
Redirect permanent / https://neos21.net/
</If>

このようにすると、

へのアクセスは

へと明確にリダイレクトされ、ブラウザのアドレスバーもキチンと書き換わる。

curl でも試してみよう。

$ curl http://neo.s21.xrea.com/games/index.html -v
*   Trying 150.95.8.121...
* TCP_NODELAY set
* Connected to neo.s21.xrea.com (150.95.8.121) port 80 (#0)
> GET /games/index.html HTTP/1.1
> Host: neo.s21.xrea.com
> User-Agent: curl/7.54.0
> Accept: */*
> 
< HTTP/1.1 301 Moved Permanently
< Date: Wed, 18 Nov 2020 04:53:58 GMT
< Server: Apache
< Location: https://neos21.net/games/index.html
< Content-Length: 243
< Content-Type: text/html; charset=iso-8859-1
< 
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://neos21.net/games/index.html">here</a>.</p>
</body></html>
* Connection #0 to host neo.s21.xrea.com left intact

ちゃんとリダイレクトされている。

ちなみに curl でリダイレクト先を取得するには -L オプションを指定して叩けば良い。

# -I オプションも付与して、ヘッダのみ確認する
$ curl http://neo.s21.xrea.com/games/index.html -L -I
HTTP/1.1 301 Moved Permanently
Date: Wed, 18 Nov 2020 04:57:28 GMT
Server: Apache
Location: https://neos21.net/games/index.html
Content-Type: text/html; charset=iso-8859-1

HTTP/2 200
date: Wed, 18 Nov 2020 04:57:28 GMT
server: Apache
strict-transport-security: max-age=31536000
last-modified: Tue, 17 Nov 2020 23:15:08 GMT
etag: "3117-5b455aa711d8e"
accept-ranges: bytes
content-length: 12567
vary: Accept-Encoding,User-Agent
content-type: text/html

こんな感じ。確かにリダイレクトできた。

https://neos21.net/ でアクセスすると普通に 200 が返ってくるので、コチラには影響していない。ちゃんと If で分岐できていてよきよき。