ラベル .htaccess の投稿を表示しています。 すべての投稿を表示
ラベル .htaccess の投稿を表示しています。 すべての投稿を表示

2013年1月13日日曜日

PCとスマートフォン用サイトを切替える方法

一番簡単な方法はmod_rewriteモジュールでUserAgent情報をみて.htaccessでアクセス制御をする方法、UserAgentでAndorid, iPhone, iPod, Windows Phone などの判別が可能。


<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond %{HTTP_USER_AGENT} (Android|iPhone|iPod|Windows.Phone) [NC]
 RewriteCond %{QUERY_STRING} !mode=pc
 RewriteRule ^$ /sumaho/ [R,L]
</IfModule>


上記のように .htaccess ファイルを目的のフォルダ(PC用サイト)に設置しておく。


.htaccess についてここでは詳しく触れないが、ここで使用する書き方だけ少しだけ説明しよう。


'RewriteEngine On' はURLのリライトを有効にする、{HTTP_USER_AGENT}でUserAgent情報を取り出して後述に続く文字列で判定する。
'|' パイプラインは or を、'.' ドットは任意の一文字を意味する。

'[NC]' は大文字と小文字の判別をしないオプション。'[R,L]' のRはリダイレクト、Lは書き換えを意味する。

上記では、UserAgentに指定した特定の文字列が一致した場合に、/sumaho/へリダイレクトする。
UserAgentを追加することで、ガラケーも振り分けすることが可能。


なお、タブレット端末についても、記述の仕方で振り分けが可能だ。たとえば、AndroidタブレットをPCサイトへ振り分けたいのであれば、"Android" を "Android.*Mobile" に変更する。

'*' は0文字以上の任意の文字列を意味しており、'.*' と記述することで、1文字以上の任意の文字列になる。"Android"~"Mobile"の間は何文字入っても該当することになる。



最終的には、PCサイトとスマホサイトを切り替える方法は、ユーザに選択させる方法がいいのかもしれない。

初めに自動振り分けによってスマホ用ウェブページを表示させた場合、PC用ウェブページのリンクを貼っておけばいいだろう。大手のサイトは、この手法をとっていることが多い。


.htaccessについては、過去のブログでも説明しているので、参考にしてほしい。


2012年10月13日土曜日

.htpasswdの作成と.htaccessによる認証(アクセス制御)


.htpasswdの作成

.htpasswdファイルの保存場所は、public_htmlより上位フォルダへ作成。
.htpasswdファイル用の適当なフォルダを作成しておくとよい。

新規作成の場合は、"-c" オプションを付ける。
user1 を作成
# htpasswd -c /home/user/pwd/.htpasswd user1


パスワードを入力すると.htpasswdに user1 が作成される。

# New password:
# Re-type new password:
# Adding password for user user1





ユーザを追加する場合は、"-c" オプションは付けない。(-c をつけると以前の情報が消えてしまう)
user2 を追加する
# htpasswd /home/user/pwd/.htpasswd user2


また、パスワードの変更は同様の手順で上書きされる。
user1 のパスワードを変更

# htpasswd /home/user/pwd/.htpasswd user1





.htaccessの作成

.htaccessはアクセス制御を行いたいフォルダに置く。例えば、.htpasswdを利用したパスワードを設定したいだけなら、下のようになる。

AuthUserFile /home/user/pwd/.htpasswd
AuthGroupFile /dev/null
AuthName "Secure site"
AuthType Basic
require valid-user


各項目の概略

AuthUserFileパスワードファイルの場所
AuthGroupFileグループファイルの指定、必要ないので "/dev/null"
AuthName認証時のメッセージ
AuthType認証方法、Basic認証を指定
requirevalid-userは全てのユーザ、"user [username]"で任意のユーザ


また、Basic認証とIPアドレスによる認証を行いたい場合は下のように記述する。


Order Deny,Allow
Deny from all
Allow from 192.168.1
Allow from 127.0.0.1

AuthUserFile /home/user/pwd/.htpasswd
AuthGroupFile /dev/null
AuthName "Secure site"
AuthType Basic
require valid-user

上記は、指定したIPアドレスとBasic認証の両方が一致しなければアクセスできないようになる
どちらか片方の条件を満たしたら許可したい場合は、"Satisfy Any" の記述を加える。


Order Deny,Allow
Deny from all
Allow from 192.168.1
Allow from 127.0.0.1

AuthUserFile /home/user/pwd/.htpasswd
AuthGroupFile /dev/null
AuthName "Secure site"
AuthType Basic
require valid-user

Satisfy Any


また、携帯やスマートフォンなどからの制御も行いたい場合は次のような記述方法もある。

SetEnvIf X-UP-SUBNO ^05001234567890_ag\.ezweb\.ne\.jp$ mobilephone
SetEnvIf X-UP-SUBNO ^05012345678901_ae\.ezweb\.ne\.jp$ mobilephone
Order Deny,Allow
Deny from all
Allow from env=mobilephone
Allow from 192.168.1
Allow from 127.0.0.1

AuthUserFile /home/user/pwd/.htpasswd
AuthGroupFile /dev/null
AuthName "Secure site"
AuthType Basic
require user user1

Satisfy Any

上記は指定されたユーザ(user1)での au のサブクラスID の認証を加え、指定された契約者IDの端末または指定されたIPアドレスで認証、それ以外はBasic認証によるアクセス制御となる。




2012年3月22日木曜日

.htaccessによる認証

.htaccessでパスワードかIPどちらかの認証を満たしていれば許可する



.htaccessで「Satisfy Any」を指定すると、どちらかの認証を通ればいい設定となる。デフォルトは「Satisfy All」で、両方の認証を必要とする。

下記は"192.100.100"ネットワークからのアクセスは許可、それ以外はBasic認証を必要としている。

order deny,allow
deny from all
allow from 192.100.100

AuthType Basic
AuthName "pas"
AuthUserFile /home/user/pas/.htpasswd
require valid-user
Satisfy Any



携帯電話で個体識別情報(AGENT)による認証


携帯電話には、個体を識別するための情報がある。これを利用して.htaccessでアクセス制御を行うことが可能だ。
PHPなどで、正規表現などを利用しUSER AGENTの中から個体識別情報を抽出することができる。

au携帯の固有ID(サブスクライバー ID)


auには、EZ番号(サブスクライバID)と呼ばれる29桁のユニークID番号がある。

//PHPでのサブスクライバIDを取得
$id = $_SERVER['HTTP_X_UP_SUBNO'];



ドコモとソフトバンク携帯の個体識別番号


ドコモとソフトバンク携帯の個体識別番号15桁のユニークIDがある。

//PHPでの個体識別番号を取得
preg_match("/^.+ser([0-9a-zA-Z]+).*$/", $useragent, $match);
$id = $match[1];



au携帯で固有ID(サブスクライバー ID)による認証の例



SetEnvIf X-UP-SUBNO ^05012345678901_ag\.ezweb\.ne\.jp$ mobilephone
SetEnvIf X-UP-SUBNO ^05012345678902_ae\.ezweb\.ne\.jp$ mobilephone
Order Deny,Allow
Deny from all
Allow from env=mobilephone
Allow from 192.100.100


上記は2つのサブスクライバーIDと"192.100.100"ネットワークからのアクセスのみ可能。
実用には、さらに各キャリアのIPアドレス帯域を使用して、指定キャリア以外からはアクセスできないようにする。
au のIPアドレス帯域
docomo(iモード)のIPアドレス帯域
ソフトバンクのIPアドレス帯域