ここ最近色々忙しくてなかなか記事を書く時間が取れていませんでした。
という訳で今回は割と最初の方に書こうと思っていた記事を書いていきます。
今現在使われているnafuchoco.pageというドメインを取る前は
それぞれのサイトに1つずつドメインを分けて運用していました。
今回、高速化と管理ドメインの削減を目的にサブドメインに纏めたのですが、
一部ドメインは破棄せずそのまま転送して使うことにしました。
そこについての話は長くなってしまうのでここでは触れません。
そこで旧ドメインから新ドメインにドメイン名以降のパラメータを変更することなく、
転送されるように設定する必要がありました。
また、基本的に恒久的な転送になるのでそれを検索エンジンに伝える必要もあります。
この場合に行う処理が301リダイレクトになります。
そもそも301とはHTTPステータスコードの1つであり
「301 Moved Permanently」といって恒久的にリソースが移動したことを表すコードです。
この他に「302 Found」が一般的です。
こちらは一時的に変更された場合に使用するもので、
検索エンジン等から前のURLを削除したくない場合に用いります。
その肝心の301リダイレクトの行い方ですが、
Apacheサーバの場合は.htaccessというファイルを転送したいページやディレクトリに設置して設定を行います。
今回はNgnixの設定方法については説明しません。
レンタルサーバーはNgnixが使われている場合でも.htaccessファイルに対応していることが多いです。
.htaccessでの転送設定は一般的にRedirectを用いますが、
正規表現などのより複雑な条件指定を行う場合はRewriteEngineを使用します。
Redirect permanent / https://example.com/
RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
それぞれの使用方法はこんな感じです。
1つ目は指定したディレクトリ以下「/」に対するアクセスを指定したアドレスに転送します。
Redirectの後ろの「permanent」が301転送を表しています。
302転送を行いたい場合は「temp」を指定します。
2つ目はHTTPへのアクセスをHTTPSへ転送する場合に用いられます。
まず1行目で「RewriteEngine」を有効化しています。
次に「RewriteCond」で転送を行う条件を指定します。
この例だとHTTPSへのアクセスではない場合に転送されます。
そして転送先に関する設定です。
条件に該当する全てのアクセスを移動先のアドレスへ転送します。
「^(.*)$」は正規表現になっており「^」が行の先頭を意味する記号であり
「$」が行の末尾を表す記号になっています。
間の「.*」は任意の文字を0回以上繰り返しなのでどんな場合でも該当します。
前後の「( )」は正規表現をグループ分けする場合などに使用されます。
そして転送先アドレスの最後についている「$1」で正規表現にヒットした文字列をそのまま利用するという意味合いになっています。
要約するとHTTPへの接続が来た場合に指定されたページ階層を維持したまま指定したドメインに転送するという内容になっています。
最後についている「[R=301,L]」は
R=301が301で転送してくださいという指示で、この中を302にすれば302で転送してくれます。
そして最後のLはルールが該当した場合は次の行に進まずここで処理を終了してくださいという意味になります。
RとLの順番はどちらでも良いのですが、Lが終わりを指すのでわかりやすくR, Lの順番で書くことが多いかと思います。
RewriteCondを指定せずにRewriteRuleを記述した場合、すべての場合においてRewriteRuleに該当するかのチェックが行われます。
RewriteCondはいわゆる前段階のフィルタだと考えて大丈夫だと思います。
という訳で今回は2つのパターンでWebページを転送する方法を紹介しました。
今回はページ階層を維持したまま他ドメインに転送する場合の方法について書きましたが、他にも転送する方法や条件など様々なパターンがあります。
今後その他の転送パターンについても触れていければと思います。
コメント