htaccessでリダイレクト設定 – 基本の書き方やコードの意味

htaccessを使ったサーバー設定方法のメモです。

【公式ドキュメント】Apache HTTP Server Tutorial: .htaccess files – Apache HTTP Server

ドメインの正規化

同じページを意味する下記のようなURLでアクセスできてしまう場合に、統一させるために設定。

  • wwwのあり・なし
  • ファイル名のあり・なし(index.html/php)
  • 末尾のスラッシュのあり・なし

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

リダイレクト設定

「http」から「https」へ

【htaccessの記述】

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

www

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

一部のページだけ(以下の場合 /form/ のディレクトリ配下にあるファイルがそれぞれ“https”にリダイレクト)

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^(httpsにリダイレクトしたいページの相対パス).*$ [OR]
RewriteCond %{REQUEST_URI} ^/form/.*$
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

wwwあり/なし

広告

www なしで統一させたい場合

RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301]

www ありで統一させたい場合

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

すでに記事が公開されていて、その中に絶対パスでのリンクを設定していたら可能な限り修正していきましょう。設定がちゃんとされていれば自動的にリダイレクトしてくれますが、不要なリダイレクトはない方が良いです。

広告

BASIC認証

BASIC認証をかけるには .htaccess ファイルと .htpasswd ファイルが必要です。
この2つのファイルを、BASIC認証をかけたいページの階層に入れることで設定できます。

.htaccessファイルの設定例】

<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>
Options -Indexes
AuthUserFile /フルパス/.htpasswd
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user 
order deny,allow

.htpasswdファイルの設定例】

ユーザー名: 暗号化されたパスワード

htaccessファイルの記述内容

フルパスは各レンタルサーバー、管理画面内のアカウント情報などで確認できます。

ドメイン全体(ルート)をBASIC認証で設定する場合は確認したフルパスをそのまま記述します。特定のサブディレクトリの場合は、そのディレクトリ名を追加します。

AuthUserFile /フルパス/.htpasswd
AuthUserFile /フルパス/example/.htpasswd

【参考】【簡単】サーバーのフルパス(絶対パス)の調べ方 | S.Design.Labo

500 Internal Server Error になる

500エラーは、サーバーに何かしらエラーが発生している状態です。
htaccessを設定してこのエラーが出たらファイルの内容を見直しましょう。

フルパスは間違いありませんか?

.htaccess ファイルと .htpasswd ファイルともに、最後に空の1行を入れないとエラーが表示されることがあります。最後が改行されていない場合は修正してみてください。

  • ファイル内に全角スペース/全角文字がある
  • htpasswdで使うパスワードが暗号化されてない
  • パーミッションが604になっていない(604でダメなら644に変更してみる)
  • 文字コードがUTF-8 BOMありになってる場合、なしに変更する
  • 改行コードがLF以外になっている場合はLFにしてみる
  • そもそも利用しているサーバーはhtaccessが利用可能か?
  • 上記のどれを直してもダメであるなら、AuthGroupFile /dev/null の1行を消してみる

ドメイン変更した場合

元のサイトと新しいサイトでファイル構造が全く同じなら以下の記述でOK。ルートディレクトリにアップロードします。

Redirect permanent / 転送先URL

個別に転送する場合は以下のように一つずつ設定します。

RewriteEngine On
RewriteRule 転送元の相対パス $ 転送先の絶対パス [R=301,L]

WordPressのリダイレクトプラグイン

広告

カテゴリー : WEB全般