htaccess

.htaccessであれこれ。(リダイレクトとBasic認証)

More than 1 year has passed since last update.

PCとスマホでディレクトリを分けたり、
httpをhttpsにリダイレクトしたりする、あれ。
それから、よく使うBasic認証のまとめです。

PCとスマホのディレクトリを分ける場合

例えば以下のようなディレクトリで分ける場合。
PC: http://example.com
スマホ: http://example.com/sp/

PC: http://example.com/test/
スマホ: http://example.com/sp/test/

.htaccesss
RewriteEngine On

RewriteBase /
RewriteCond %{REQUEST_URI} !/sp/
RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|iPad|Android|Windows\ Phone)
RewriteRule ^(.*)$ /sp/$1 [R]

RewriteBase /
RewriteCond %{REQUEST_URI} /sp/
RewriteCond %{HTTP_USER_AGENT} !(iPod|iPhone|iPad|Android|Windows\ Phone)
RewriteRule ^sp/(.*)$ $1 [R]

それぞれの意味とメモ。

RewriteEngine On
#Apacheのモジュール「mod_write」を有効にする。

RewriteBase /
#リダイレクトのベースとなるディレクトリ。転送後URL。

RewriteCond %{REQUEST_URI} !/sp/
#条件。URLに/sp/が含まれていなかったら。

RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|iPad|Android|Windows\ Phone)
#条件。ユーザーエージェントの判別。

RewriteRule ^(.*)$ /sp/$1 [R]
#URLを書き換える指示。^行頭。$行末。.*全て。
#()でグループ化した箇所を$1で部分置換する。

RewriteBase /
#リダイレクトのベースとなるディレクトリ。転送後URL。

RewriteCond %{REQUEST_URI} /sp/
#条件。URLに/sp/が含まれていたら。

RewriteCond %{HTTP_USER_AGENT} !(iPod|iPhone|iPad|Android|Windows\ Phone)
#条件。ユーザーエージェントの判別。

RewriteRule ^sp/(.*)$ $1 [R]
#書き換え指示。()でグループ化した箇所を$1で部分置換する。

httpをhttpsにリダイレクトする場合

.htaccess
RewriteEngine On

RewriteBase /
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R]

それぞれの意味とメモ。

RewriteEngine On
#Apacheのモジュール「mod_write」を有効にする。

RewriteBase /
#リダイレクトのベースとなるディレクトリ。転送後URL。

RewriteCond %{HTTPS} off
#条件。ssl(https)が無効の場合。

RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R]
#書き換え指示。全てをhttpsにリダイレクト。
#%{HTTP_HOST} httpリクエスト先のサーバー名
#%{REQUEST_URI} ページアクセスのURL

その他の環境変数確認に便利なページ。
ルフトツールズ(LUFTTOOLS) Web便利ツール集 - 環境変数チェッカー

全てのページをトップにリダイレクトする場合

.htaccess
RewriteEngine On

RewriteBase /
RewriteCond %{REQUEST_URI} !(^/$)
RewriteRule ^(.*)$ / [R=301,L]

それぞれの意味とメモ。

RewriteEngine On
#Apacheのモジュール「mod_write」を有効にする。

RewriteBase /
#リダイレクトのベースとなるディレクトリ。転送後URL。

RewriteCond %{REQUEST_URI} !(^/$)
#条件。トップページ以外のURLの場合。

RewriteRule ^(.*)$ / [R=301,L]
#書き換え指示。全てをトップにリダイレクト。
#301は恒久的な転送の場合。一時的な場合は302。
#Lは一旦処理を終了。

Lについて、こちらの記事が参考になりました。
.htaccess に RewriteRule 書くときは、[L]フラグをつけてもそこで終了しないかもよ?って話。

Basic認証を設定する場合

・まずは、以下で生成された結果を.htpasswdで保存する。
ルフトツールズ(LUFTTOOLS) Web便利ツール集 - .htaccess による認証用 パスワード暗号化ツール
TECH-UNLIMiTED|すぐに使える便利なWEBツール - .htpasswd生成

.htaccess
RewriteEngine On
AuthUserfile サーバーディレクトリ.htpasswd
AuthGroupfile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user

<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>

サーバーディレクトリは、フルパスを指定すること。
分からない場合は、適当にphpを作成して
以下のコードでフルパスを確認する。

php
<?php
echo __FILE__;
?>

.htaccessと.htpasswdをルートディレクトリに置く。

おわり。