PCサイトに携帯電話(ガラケー)でアクセスしたときに転送するプログラムをPHPで組んだ。組み込んだソースは下記のとおり。
<?php $page_m='モバイルサイトのURL'; $agent=$_SERVER['HTTP_USER_AGENT']; if (preg_match("/UP.Browser/[3-5]/",$agent) || preg_match("/J-PHONE//",$agent) || preg_match("/DoCoMo//",$agent) && !(preg_match("/(Win|Mac|Linux|FreeBSD|OS/2|Solaris)/i",$agent)) || preg_match("/UP.Browser/",$agent) || preg_match("/^Vodafone/",$agent) || preg_match("/^SoftBank/",$agent) || preg_match("/^MOT-/",$agent) || preg_match("/DDIPOCKET;/",$agent) || preg_match("/WILLCOM;/",$agent) || preg_match("/L-mode///",$agent)) { header("Location: $page_m"); }else{ }//end if ?>
XREAとかコアサーバーなんかだと上記でも転送するんだけど、ハッスルサーバーの場合、
Warning: preg_match() [function.preg-match]: Unknown modifier '2' in /home/USER/public/www/aaa.net/bbb.html on line 7 Warning: Cannot modify header information - headers already sent by (output started at /home/USER/public/www/aaa.net/bbb.html:7) in /home/USER/public/www/aaa.net/bbb.html on line 17
みたいなエラーが・・・ いろいろググったら単純にエスケープが足りなかったみたい。
エラーの原因は下記の箇所だったんだけど、
&& !(preg_match("/(Win|Mac|Linux|FreeBSD|OS/2|Solaris)/i",$agent)) ||
この中のOS/2の箇所をOS/2と、スラッシュをエスケープすることで問題解決。ハッスルサーバーって厳しいのね。