業務内で.htaccessを作成することがあり、備忘録として残します。
.htaccessとは
.htaccessファイル (「分散設定ファイル」)はディレクトリ毎に設定を変更する方法を提供します。ディレクティブの書かれたファイルをディレクトリに置くことで、そのディレクトリとそのサブディレクトリすべてにディレクティブを適用させることができます。
(https://httpd.apache.org/docs/2.4/ja/howto/htaccess.html より引用)
要約するとディレクトリを設定するファイルということですかね…。
さくらのレンタルサーバーのコンソールなどからBasic認証をかけた後、サーバーのディレクトリを確認するとこのファイルが生成されていると思います。
ApacheなどいくつかのWebサーバーに対応しています。レンタルサーバーによって、設置できない場合もあるようなので、使用するレンタルサーバー毎に確認が必要。
ちなみにApacheとは
Webサーバーソフトのこと。
世界的に使用されている著名なWebサーバーソフトのうちの1つで、他だとMicrosoft社のIISやnignxがある。
.htaccessを使う時
・リダイレクト
・BASIC認証
・IPアドレス制限
などを行いたい時。(他にもできることはたくさんあります)
今回行いたいこと:URLの正規化
http://www.sample.co.jp
http://sample.co.jp
https://sample.co.jp
この3つのURLは別のURLとして認識されるものの、実際に表示される内容は同じです。
そのため、
https://www.sample.co.jp
にURLを統一したいと思います。
最初のエラー
書いていたコード
RewriteEngine on
RewriteCond %{HTTP_HOST} ^sample\.co\.jp$
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.sample.co.jp/$1 [R=301,L]
上記でテストしたところ、TOPはSSL転送とwwwへの正規化が行えたのですが、下層ページで動作していませんでした。
次のエラー
RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^sample\.co\.jp$ [OR]
RewriteRule ^(.*)$ https://www.sample.co.jp/$1 [R=301,L]
[OR]の書き方が間違ってる例。
[OR]の位置を修正
RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^sample\.co\.jp$
RewriteRule ^(.*)$ https://www.sample/$1 [R=301,L]
上記で下層ページにも正しく反映される状態になりました!
サーバーによっても変わってくると思いますので、使用しているサーバーではどのように設定できるかを確認したほうが良いかもしれないです。
もし誤っている内容などあればご指摘いただけると大変うれしいです…!
参考にした記事・URL
https://httpd.apache.org/docs/2.4/ja/howto/htaccess.html
https://qiita.com/sanogemaru/items/7e5bd6e8dc9b04c9978e
https://murashun.jp/article/programming/htaccess/htaccess-sample_code.html#chapter-3