< | >

リダイレクトのために htaccess 作成
  • (2021-03-22 12:25:44)

コピペだけでダメなとき


ドメインの引越してリダイレクトを設定する際、「.htaccess」ファイルにお世話になる。

リダイレクトの記述方法は、サンプルがネット内に多数でているので、コピペでさくっと作成できる。しかし、ちょっと複雑な条件をつけるとなると、記述の仕方を勉強することになる。

今日は、それではまったので記録。


どこにhtaccessの公式マニュアルはあるのか?


第一に「htaccessって何だ?」という疑問から。

ボクは、リダイレクト用の標準化されたルールと思っていた。RFCで決められたルールのような。調べてみると、Apache Webサーバの設定ファイルだった。

ということは、Apache開発者によって決められ記述方法があるのだろう。

htaccessのサンプルを解説してくれているページは多いが、ほとんどキモの部分の抽出であり、包括的な解説ページが探し出せなかった。

Apacheの巨大なドキュメンテーションの中にあると推測されるが、そういう複雑・長文なドキュメントとなると、ボクのような素人が見ても時間の無駄かもしれない。


断片的に集めた情報


下記は、htaccessについいて解説してくれている親切な人々のサイトを回って収集してきたもの:

####################################
# htaccess のファイル形式 →
# ファイル名 → 「.htaccess」にする
# 文字コード → 「UTF-8」(BOMなし)(とくに日本語記述なら)
# 改行コード → Linuxなので「LF」が良い。「CR+LF」でも動く
# コメント → #から行末まで
# パーミッション → (604)
# .htaccessの最後の行は改行を入れる

# [L] → URL書き換え処理を終了し、以降のRewriteRuleを適用しない
# 条件式の形状 → 「RewriteCond A B C」。Cはパターン/オプション
# 「A = B」かつ C条件で trueを返す場合、条件に一致
# Cを指定しない場合は「A = B」の場合trueを返す
#

# RewriteEngine On → リダイレクト機能ON(有効範囲は、たぶん[L]まで)
# RewriteCond → 条件(condition)
# RewriteRule → 書換ルール。書換は部分は「https://」から始める
# %{HTTP_HOST} → ドメイン部分。お尻の「/」部分は含まない
# %{REQUEST_URI}→ リクエストされたurlのドメイン以降。「/」含む
# (.*) → 0文字以上の任意の文字列
# $1 → 後方参照、先の括弧でマッチした文字列
# [NC] → 大文字と小文字を区別しない
# !^www\. → 「!」否定、「^」先頭、「\」エスケープ、「$」末尾
# テスト環境でOKでも環境違うとNGという場合がある
# 記述ミスがあると設置したディレクトリ以下が全て500エラーになる
#


#################################################
# (1) wwwなし → wwwありに統一
# (2) http → httpsに変換
# http://www.garunimo.com/program/p35.php
#################################################

# wwwなしからありへの記述方法の一例
# RewriteCond %{HTTP_HOST} !^www\.
# RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]


# 汎用性が高い記述方法
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]



#################################################
# ドメイン全体のリダイレクト
#################################################
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.AAAAAA.com
RewriteRule ^(.*) https://www.BBBBBB.com/$1 [R=301,L]

RewriteEngine On
RewriteCond %{HTTP_HOST} ^AAAAAA.com
RewriteRule ^(.*) https://www.BBBBBB.com/$1 [R=301,L]

# 下記のように、条件を続けて2行入れる際は、
# たぶん、[OR]を条件式に入れるべき
# [OR] 連続する RewriteCond のいずれかが true の場合に実行
# 省略時はAND条件。連続するRewriteCond がすべてtrue 時に実行
# 下記は[OR]を入れたが、テストしていないので動作するか未確認

# RewriteCond %{HTTP_HOST} ^www.AAAAAA.com [OR,NC]
# RewriteCond %{HTTP_HOST} ^AAAAAA.com
# RewriteRule ^(.*) https://www.BBBBBB.com/$1 [R=301,L]



<< htaccess 効かない原因は、アクセラレータ?< | >知らない連中が他人の名刺をクラウドに? 名刺は完全廃止にせねば >>
search
layout
admin

[▲page top]