リダイレクト スマートフォン編

スマートフォンのサイトを構築する際にPCサイトにアクセスした際に自動的にスマートフォンサイトに遷移させる必要がある。いくつか方法があるので、まとめた。


主な方法としては、

  1. .htaccessを使う
  2. javascriptを使う
  3. サーバサイド系の言語で処理する(PHP,Rubyなど)

1,2を扱ったのでそれらを作業記録として残しておく。

.htaccessを使う


参考

http://webings.net/htaccess/rewrite/

下の例でRewriteEngine On-->redirect機能を使うことを宣言。これを利用するにはhttpd.confをいじる必要がある。ちなみにCentOSはデフォルトでこの機能が使える。

RewriteCond {HTTP_HOST} ^google.com
RewriteRule ^(.*)$ http://www.google.com/$1 [R=301,L]

#例えばwwwつきのドメインと、そうでないドメインどちらに統一するか?など指定したい時に使う
上の例はgoogle.comをwww.google.comに統一している。よく知らないけどSEO的に効果はあるらしい。

RewriteCond {HTTP_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://www.google.com/$1 [R=301,L]

#上はindex.htmlにアクセスした場合にgoogle.comに遷移させる。
#これをドキュメントルートに保存する。rails使ってるならpublicに置くし、普通なら/var/www/とかだろうか。

肝心のスマートフォンのリダイレクトだが、下記のように書く

RewriteCond %{HTTP_USER_AGENT} iPhone
RewriteRule ^.*$ ドメイン [R]

RewriteCond %{HTTP_USER_AGENT} iPad
RewriteRule ^.*$ ドメイン [R]

RewriteCond %{HTTP_USER_AGENT} iPod
RewriteRule ^.*$ ドメイン [R]

RewriteCond %{HTTP_USER_AGENT} Android
RewriteRule ^.*$ ドメイン [R]

とはいえ、実際自分も試してみたけどどうも上手く動かなかったので、結局ruby側で動かした。
あんまりなんでもかんでも.htaccessで処理するのは良くないらしい。




javascriptで動かす

サーバサイド側の言語で処理するのは、PHPとかだと拡張子を.phpとかにする必要がある。
だからjavascriptでほいっとやるのも手ではある。

http://helog.jp/hp/smartphone/1095/


(基本的にパクリで)すまんな

<script type="text/javascript">
var agent = navigator.userAgent;
if(agent.indexOf('Linux; U; Android ') != -1 ||
        agent.indexOf('iPhone; U') != -1 ||
    agent.indexOf('iPod; U') != -1||
        agent.indexOf('iPad; U') != -1){
    location.href = 'ディレクトリ or ドメイン';
}
</script>

AndroidとかiPhoneとかはこれで飛ぶことが出来る。
色々端末が増えているので、自信が無かったら、
window.alertとかで逐一ユーザーエージェントをチェックしてやる必要があるかもしれない。


おまけ

スマートフォンのページにIEで閲覧しようとすると基本的に見れない。
したがって、これもリダイレクトしてやる必要がある。

<script type="text/javascript">
<!--      
var agent = navigator.userAgent;
if(agent.indexOf("MSIE") != -1){
location.href = 'http://www.nabetsuneshine.com';//ここには飛びたいURL
window.alert("なんでや!IE関係ないやろ!");//ここにお詫びの言葉「IEサポートしてません」とか。
}
--> 
</script>

こういうのをhtmlファイルに書いてやればいい。

indexOfは、引数に取った文字列が存在したら、その文字がどこにあったかを教えてくれる。
無かった場合は-1を返すのでif文の中でユーザーエージェントを取得したものの中に
"MSIE"(IEのユーザーエージェント)があったらリンク先に飛ぶということを指定してやる。



参考

なんでや!阪神関係ないやろ!

http://goo.gl/3yadc

すまんな

http://nanjupiter.blog129.fc2.com/blog-entry-11.html

scpの使い方

いつまで経っても、scpコマンドの使い方を覚えないでググッてばかりなので、
まとめてみる。

http://cns-guide.sfc.keio.ac.jp/2004/2/6/2.html


リモート->ローカル

リモートのpublic_htmlの中にあるindex.htmlファイルをローカルに載っけるためには、

$ scp t00000tf@ccz00.sfc.keio.ac.jp:public_html/index.html .

ちなみに -rをつけるとディレクトリ毎持ってくることが可能

ローカル->リモートに関しては、manを読めカス。

jquery mobileの数値のみ入力フォーム

jquery mobileでフォームに数値のみ入力したい場合

<li>number:<input type="number" name="number" id="number" step="5"></li> 

input type ="number"にすればいい。

WEBアプリなどで見ると、自動的にデフォルトの入力が数字にしてくれる。
フォームに数値を入力することが多い場合は、これを指定しているか否かでは
エンドユーザの使用感に大きく関わってくる。

これは基本的に最新バージョンのjquery mobileをインクルードしていれば問題無いけど
前のバージョンだと出来ない場合がある。
したがってちゃんと最新バージョンを呼んできましょう。

jquery mobileのテンプレ

<html>                                                                                                                                     
<head>                                                                                                                                     
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a1/jquery.mobile-1.0a1.min.css" />                                           
<script src="http://code.jquery.com/jquery-1.4.3.min.js"></script>                                                                         
<script src="http://code.jquery.com/mobile/1.0a1/jquery.mobile-1.0a1.min.js"></script>                                                     
                                                                                                                                           
</head>                                                                                                                                    
                                                                                                                                           
<body>                                                                                                                                     
  <!--page-->                                                                                                                              
  <div  datarole="page">                                                                                                                   
                                                                                                                                           
    <!--header-->                                                                                                                         
    <div data-role="header">                                                                                                               
      <h1>エリスグリ<h1>                                                                                                                   
          </div><!--header-->                                                                                                              
                                                                                                                                           
    <!--pagecontent-->                                                                                                                     
    <div data-role="content">                                                                                                              
      <p>page content goes here</p>                                                                                                        
      </div><!--pagecontent-->                                                                                                             
                                                                                                                                           
    <div data-role="footer">                                                                                                               
      <h4>page content<h4>                                                                                                                 
          </div>                                                                                                                           
    </div>                                                                                                                                 
  <!--page-->                                                                                                                              
                                                                                                                                           
                                                                                                                                           
                                                                                                                                           
</body>                                                                                                                                    
                                                                                                                                           
</html>           

sshのセッションが切れてもプロセスが殺されない

自分が契約しているVPSで、sshがたまに無線の不安定などで
セッションが切れる。

セッションが切れるだけならばまだ良いのだが、
再ログインした際にsshdのプロセスがkillされていないことが多い。

このVPSは仮想ターミナル(screenとか)の数に制限があって、
その数は

$sudo cat /proc/user_beancounters
                     
                    held         maxheld
~~~~~~~
 numpty               3            6                    8           8           8

こういうパラメータが見ることが出来て、heldの数が8になると、セッションを張れなくなったり、screenが出来なくなったりする。

その時は、

$ps ausf| grep (user-name)
$kill pid 

とかでシコシコプロセスを殺していたが、
流石に面倒くさいので、sshd_configに何か書くことにした。

/etc/ssh/sshd_configに

ClientAliveInterval 3600

を追加。
30分操作しないとタイムアウトするように設定した。

これで良いのか分からんけど、多分プロセスが粛清されることを祈る。

JQuery mobile-Loading Error Page-

JQuery mobileのページ作ってたら、Loading Error Pageって出る。
ググッてみたらヒットした。どうやら複数症状があるらしい。

↑こんな感じ。


WEB上には、

"HAHAHA,ローカルじゃそうやって出るけど、ちゃんとHTTPでは動くから安心しな!!"

http://www.doeswhat.com/2011/03/08/jquery-mobile-error-loading-page/

え、自分、Httpで見てるんですけど,,,,,