LoginSignup
2
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-07-20

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をルートディレクトリに置く。

おわり。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2