はじめに
実務にて、サイトに http でアクセスしても https になるように、且つ www ありでアクセスしても www なしになるようにしてほしいという小仕事の依頼があり、それを解決した情報になります。.htaccess ファイルにソースコードをコピペ(コピー&ペースト)して、設定したいディレクトリに設置するだけで簡単に流用ができます。
ソースコード
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
検証環境
- Apache 2.2.34 / マニュアル
解説
設定ファイルの作成
.htaccess とは、Web サーバーの管理者以外でもディレクトリ単位で設定ができる設定ファイルのことです。
作り方は簡単で、適当なテキストエディタで「.htaccess」という拡張子がないテキストファイルを作成するだけです。
作成後、パソコンの設定を隠しファイルと拡張子が見える設定にして、「.htaccess.txt」のように拡張子が勝手に付けられていないか確認します。
.htaccess を設置すると、設置されたディレクトリとその下層のディレクトリに対して設定が適用されます。下層のディレクトリに設定が矛盾している .htaccess がある場合、下層ディレクトリ側の設定が優先されます。
設定ファイルの編集
URL を書き換える準備として RewriteEngine Directive を on にしてランタイム書き換えエンジンを有効にします。
RewriteEngine on
www なしにリダイレクトする設定をします。
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond Directive で書き換えが行われる条件を定義します。
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
%{HTTP_HOST}
はホスト名、^
は行頭、\.
は . のエスケープ、(.*)
は任意の0文字以上の文字列、$
は行末、[NC]
は大文字と小文字を区別しない、
という意味になります。
やっていることは、ホスト名から www なしの文字列を指定しているだけです。
次に RewriteRule で RewriteCond Directive の条件を満たした場合の設定をします。
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
^
は行頭、(.*)
は任意の0文字以上の文字列、$
は行末、%1
は RewriteCond Directive の (.*)
の文字列が入り、$1
はページ名が入り、[R=301,L]
は 301 リダイレクトする、
という意味になります。
やっていることは、www なしの URL に https: をくっ付けてリダイレクトしているだけです。
http でアクセスしても https になる設定をします。
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond Directive で書き換えが行われる条件を定義します。
RewriteCond %{HTTPS} off
%{HTTPS} off
は通信プロトコルが https でない場合、
という意味になります。
やっていることは、http でアクセスされた場合という条件分岐です。
RewriteRule で RewriteCond Directive の条件を満たした場合の設定をします。
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
^
は行頭、(.*)
は任意の0文字以上の文字列、$
は行末、%{HTTP_HOST}
はホスト名、%{REQUEST_URI}
はホスト名より後ろの URL、[R=301,L]
は 301 リダイレクトする、
という意味になります。
やっていることは、http でアクセスされたら https: をくっ付けてリダイレクトしているだけです。
.htaccess ファイルの最後に改行を入れて保存します。改行がないと最後の記述が無効になる場合があるので注意します。
以上です。
おわりに
正規表現 は知らないと魔法の呪文のように見えますが、知ってしまえば恐れるに足りないです。