サイト内でURLを転送する(.htaccessの記述方法)
一部混在していたURLの表記を統一したり、存在しないディレクトリへのアクセスからホームページに誘導するため、サイト内のURL転送を少し変更してみました。全て、.htaccessファイルへの記載です。
なお、何度も出てくる RewriteEngine on
は、一度記載すれば以降は不要です。
httpからhttpsへ統一する
URL表記の先頭のhttpとhttpsはホームページのデータのやりとりのプロトコル(定義)をさしていて、httpは暗号化されていない、httpsは暗号化されていることを意味します。最近のブラウザは必ずと言ってもいいほどhttpsに対応していて、httpだと警告を発するブラウザも増えてきました。そこで当サイトも遅ればせながらhttpsに対応して、httpへのアクセスは全てhttpsへ転送するようにしました。
.htaccess
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
wwwのあるなしをwwwありに統一する
普通にアクセスするにはどうでもいい事なんですが、enkai-ne.jpへのアクセスをwww.enkai-net.jpへ転送して統一するようにしました。
.htaccess
RewriteEngine On
RewriteCond %{HTTP_HOST} ^enkai-net.jp$
RewriteRule ^(.*)$ https://www.enkai-net.jp/$1 [R=301,L]
ディレクトリを転送する
ディレクトリ名を/cgi-bin/から/jq3btu/に変更したため、古いディレクトリへアクセスがあった場合のエラー回避のためディレクトリごと転送しました。
.htaccess
RewriteEngine On
RewriteRule ^cgi-bin(.*)$ /jq3btu/$1 [L,R=301]
index.htmlへのアクセスを転送する
ほとんどのWEBサイトのデフォルトホームページはindex.htmlなんですが、当ブログはindex.htmlへのアクセスはフレームでbloxsom.cgiへ転送していました。これを、URL転送に変更しました。
.htaccess
RewriteEngine On
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ https://www.enkai-net.jp/jq3btu/blosxom [L,R=301]
存在しないファイル・ディレクトリへのアクセスを転送する
ほとんどのWEBサイトでは、
- ディレクトリへのアクセスはそのディレクトリのindex.htmlへ転送
- 存在しないファイルへのアクセスはエラー表示
となっており、当サイトもそのようにしていました。これを、ホームページへ転送するよう変更しました。※この設定によって、index.htmlファイルを消してしまったら上の設定は不要になります。
.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . https://www.enkai-net.jp/jq3btu/blosxom [L]
ディレクトリへのアクセス対策(おまけ)
ほとんどのレンタルサーバでは以上の設定でいいのですが、自前のサーバや一部のレンタルサーバでは、index.htmlやindex.cgi等を置いてないディレクトリ名へのアクセスはディレクトリ内のファイル構造を表示してしまい、直接そのディレクトリ内のファイルが読み取れてしまいます。実はWEBサーバの初期設定がそうなっているからです。逆に言えば対策されているレンタルサーバは親切に設定変更してくれているんです。この現象を回避するため、index.htmlやindex.cgi等を置いていないディレクトリ名へのアクセスを拒否します。
.htaccess
Options -Indexes