No.1
- 回答日時:
私も詳しくないのでアドバイスですが、
voteformページはHTMLファイルですよね。
PC等からのアクセスはそのHTMLファイル自体を表示したくないということでよろしいのでしょうか?
でしたら、サーバの.htaccessの設定(サーバがApacheの場合ですが。。)で、携帯のipアドレスのみ通過させればいいような気がします。
.htaccessの参考ページはこちら。
http://mikeneko.creator.club.ne.jp/~lab/web/htac …
このページにはi-modoやvodafoneのみ通過させる方法まで記述されてますので、一読してみてください。
ただし、レンタルサーバなどをお使いもしくの場合は、.htaccessファイルの使用を許可していない所もたくさんあるので、管理者に確認してみてください。
その場合は、voteformページは表示させるが、その先のページには進めないようにCGIでperlで書かなければ無理のようなきがします。
たとえば、rl_prf.cgiファイルってありますよね。
その中の中ほどに「#ここまでの設定部分」って書いてますが、(探してください)その下に、$ipと$hostって変数がありますよね。ですから、携帯の$ip意外では他のページに飛ぶ処理とかをこのへんでかいてやればいいのではないでしょうか。ちょっと、工夫が必要ですけど。
はずしてたらすみません。
参考URL:http://mikeneko.creator.club.ne.jp/~lab/web/htac …
アドバイス、ありがとうございます。。。
.htaccessでhtmlフォルダ内を携帯端末以外非表示にする処理を
行ってみたのですが、voteformページ自体は、.htaccessでそう
いった処理をしても関係無く、
ranklink.cgi?id=○○○
という形でvoteformページの内容が呼び出され、表示されてしま
います。
では、ranklink.cgiを含むそれ以下のファイルも.htaccessで携帯
端末以外非表示に… とやると、ランキングページ自体全て携帯
端末以外は見れなくなってしまいます。。。
色々調べてみて、ranklink.cgiの100行目あたり
if ($a1){
&fileunlock;
&changehtml("voteform","id","ssd");
}
}
このあたりの、"voteform"の部分を"index"等に変えると、投票ページ
として読み出すページが変えれるところまでは分かったのですが。。。
ここより少し前に
(gethostbyaddr(pack('C4', split(/\./, $ENV{'REMOTE_ADDR'})
(($a1 =~ /\.docomo\.ne\.jp$/) ||($a1 =~ /\.jp-[hdtckrnqs]\.ne\.jp$/) ||($a1 =~ /\.ezweb\.ne\.jp$/))
みたいな感じでホスト名取得して、携帯以外のHOSTを持つアクセスに
関しては指定のページに飛ばす…
みたいに書けばいいのかなとは思うのですが、どう書いたらいいのか。。。
引き続き、アドバイスお願いします。。。
No.2
- 回答日時:
ranklink.cgiファイルの中に、
if( $id ne ""){
if (!-e "$datadir/$id.dat"){
&error("ID:$idは登録されていません。");
}
if (&filelock(1)){
open (IN,"+<$rankfile");
eval{flock(IN,2)};
$a1=<IN>;$a1=<IN>;@rankset=split(/<>/,scalar(<IN>));
close(IN);
&rankin;
}
}
となっているところがあると思いますので探してください。
それを、次のように、変えてください。
if ($id ne ""){
### この下3行だけ付け足すだけ、あとは変えない ###
if( $ip ne "210.153.84.0" ){
print "Location: $abshtmldir/index.$outputfile\n\n";
exit;
}
##################################################
if (!-e "$datadir/$id.dat"){
&error("ID:$idは登録されていません。");
}
if (&filelock(1)){
open (IN,"+<$rankfile");
eval{flock(IN,2)};
$a1=<IN>;$a1=<IN>;@rankset=split(/<>/,scalar(<IN>));
close(IN);
&rankin;
}
}
PCからアクセスして、http://○○○/ranking.cgi?id=○○○○でアクセスしてためしてください。
voteformページが表示されなくなるとおもいます。
210.153.84.0はDocomoのipアドレスの一部です。
Docomoのipアドレス帯域は、
210.153.84.0/24
210.136.161.0/24
なので、このipアドレス以外は指定ページに飛ばすようにすればいいと思います。
具体的には
210.153.84.0/24 は 210.153.84.0 ~ 210.153.84.255
210.136.161.0/24 は 210.136.161.0 ~ 210.136.161.255
なので、
if( $ip ne "210.153.84.0" && $ip ne "210.153.84.1" && ~ && $ip ne "210.153.84.255"
&& $ip ne "210.136.161.0 && ~ && $ip ne "210.136.161.255){
print "Location ~";
exit;
}
と書けばいいとおもいます。
ただし、$ip ne "210.153.84.0"のようにだらだらと書いていくのはしんどいので、
テキストにDocomoとVodafoneとEZwebのアドレスを書いておいて、
サブルーチン化して、テキストファイルの中にあるipアドレスと同じなら1を返すなどとしておけば
いいと思います。
■ipアドレスについては、先日書いた、htaccessのページに詳しく書いてあります。
http://mikeneko.creator.club.ne.jp/~lab/web/htac …
■各携帯のip帯域の書いたページは以下になります。
●iモードセンターのIPアドレス
http://www.nttdocomo.co.jp/p_s/imode/make/ip/ind …
●VodafoneのIPアドレス
http://developers.vodafone.jp/dp/tech_svc/web/ip …
●EZwebのIPアドレス
http://www.au.kddi.com/ezfactory/tec/spec/ezsava …
ありがとうございます。。。
教えていただいた通りに記述してみたのですが、cgiエラーが出ます。
if( $ip ne "210.153.84.0" && $ip ne "210.153.84.1" && ~ && $ip ne "210.153.84.255"
&& $ip ne "210.136.161.0 && ~ && $ip ne "210.136.161.255){
print "Location http://www.goo.ne.jp\n\n";
exit;
}
(※ 上をif ($id ne ""){ 直下に挿入)
210.136.161.0と210.136.161.255の直後の「"」が抜けていたので付け足
して試してみましたが、結果は同じでした。
ちなみに、
if( $ip ne "210.153.84.0" ){
print "Location: $abshtmldir/index.$outputfile\n\n";
exit;
}
一番最初に示していただいた例のip部を自分のipに変えて試してみたら
ipに何を指定しても、Locationで指定したurlに飛びます。。。
Locationだけ効いている様です。。。
何がいけないのでしょうか。。。
お手数掛けますがアドバイス、お願いします。。。
もう一点、できればip指定では無くHOST名による振り分けができれば…
と思っています。
ipは各キャリア不定期に追加され、チェック漏れが出る可能性があります
ので。
特にボーダフォン等は、確実にip増えているのに公式サイトの情報は2年
前から放置されていますし。。。
引き続きアドバイス、お願いします。
No.3
- 回答日時:
昨日書いたのはやめにして、
if ($id ne ""){
となってる所に、次を追加してください。(ちょっと長くて無理やりな感じの記述ですが許してください。)
##########################################################################
my ($flag_1,$flag_2) = (0,0);
my ($flag_3,$flag_4,$flag_5,$flag_6,$flag_7,$flag_8,$flag_9,$flag_10,$flag_11) = (0,0,0,0,0,0,0,0,0);
my ($flag_12,$flag_13,$flag_14,$flag_15,$flag_16,$flag_17,$flag_18,$flag_19,$flag_20) = (0,0,0,0,0,0,0,0,0);
my ($flag_21,$flag_22,$flag_23,$flag_24,$flag_25,$flag_26,$flag_27,$flag_28,$flag_29,$flag_30,$flag_31,$flag_32) = (0,0,0,0,0,0,0,0,0,0,0,0);
# Docomo - ip #
foreach my $t_ip(0..255){
if( $ip eq "210.153.84.$t_ip" ){$flag_1 = 1;break;}
}
foreach my $t_ip(0..255){
if( $ip eq "210.136.161.$t_ip" ){$flag_2 = 1;break;}
}
# Vodafone -ip #
foreach my $t_ip(32..63){
if( $ip eq "210.134.83.$t_ip" ){$flag_3 = 1;break;}
}
foreach my $t_ip(192..255){
if( $ip eq "210.146.7.$t_ip" ){$flag_4 = 1;break;}
}
foreach my $t_ip(128..255){
if( $ip eq "210.146.60.$t_ip" ){$flag_5 = 1;break;}
}
foreach my $t_ip(160..191){
if( $ip eq "210.151.9.$t_ip" ){$flag_6 = 1;break;}
}
foreach my $t_ip(192..255){
if( $ip eq "210.169.193.$t_ip" ){$flag_7 = 1;break;}
}
foreach my $t_ip(0..255){
if( $ip eq "210.228.189.$t_ip" ){$flag_8 = 1;break;}
}
foreach my $t_ip(160..191){
if( $ip eq "210.8.49.$t_ip" ){$flag_9 = 1;break;}
}
foreach my $t_ip(128..255){
if( $ip eq "210.8.159.$t_ip" ){$flag_10 = 1;break;}
}
foreach my $t_ip(0..255){
if( $ip eq "211.127.183.$t_ip" ){$flag_11 = 1;break;}
}
# EZweb - ip #
foreach my $t_ip(0..255){
if( $ip eq "210.169.40.$t_ip" ){$flag_12 = 1;break;}
}
foreach my $t_ip(192..255){
if( $ip eq "210.196.3.$t_ip" ){$flag_13 = 1;break;}
}
foreach my $t_ip(192..255){
if( $ip eq "210.196.5.$t_ip" ){$flag_14 = 1;break;}
}
foreach my $t_ip(0..255){
if( $ip eq "210.230.128.$t_ip" ){$flag_15 = 1;break;}
}
foreach my $t_ip(192..255){
if( $ip eq "210.230.141.$t_ip" ){$flag_16 = 1;break;}
}
foreach my $t_ip(32..39){
if( $ip eq "210.234.105.$t_ip" ){$flag_17 = 1;break;}
}
foreach my $t_ip(64..127){
if( $ip eq "210.234.108.$t_ip" ){$flag_18 = 1;break;}
}
foreach my $t_ip(192..255){
if( $ip eq "210.251.1.$t_ip" ){$flag_19 = 1;break;}
}
foreach my $t_ip(0..31){
if( $ip eq "210.251.2.$t_ip" ){$flag_20 = 1;break;}
}
foreach my $t_ip(0..255){
if( $ip eq "211.5.1.$t_ip" ){$flag_21 = 1;break;}
}
foreach my $t_ip(128..255){
if( $ip eq "211.5.2.$t_ip" ){$flag_22 = 1;break;}
}
foreach my $t_ip(0..255){
if( $ip eq "211.5.7.$t_ip" ){$flag_23 = 1;break;}
}
foreach my $t_ip(0..255){
if( $ip eq "218.222.1.$t_ip" ){$flag_24 = 1;break;}
}
foreach my $t_ip(0..255){
if( $ip eq "61.117.0.$t_ip" ){$flag_25 = 1;break;}
}
foreach my $t_ip(0..255){
if( $ip eq "61.117.1.$t_ip" ){$flag_26 = 1;break;}
}
foreach my $t_ip(0..255){
if( $ip eq "61.117.2.$t_ip" ){$flag_27 = 1;break;}
}
foreach my $t_ip(0..255){
if( $ip eq "61.202.3.$t_ip" ){$flag_28 = 1;break;}
}
foreach my $t_ip(0..63){
if( $ip eq "219.108.158.$t_ip" ){$flag_29 = 1;break;}
}
foreach my $t_ip(0..255){
if( $ip eq "219.125.148.$t_ip" ){$flag_30 = 1;break;}
}
foreach my $t_ip(0..255){
if( $ip eq "222.5.63.$t_ip" ){$flag_31 = 1;break;}
}
foreach my $t_ip(0..255){
if( $ip eq "222.7.56.$t_ip" ){$flag_32 = 1;break;}
}
if( !$flag_1 && !$flag_2 && !$flag_3 && !$flag_4 && !$flag_5 && !$flag_6 && !$flag_7 && !$flag_8 && !$flag_9 && !$flag_10 && !$flag_11 &&
!$flag_12 && !$flag_13 && !$flag_14 && !$flag_15 && !$flag_16 && !$flag_17 && !$flag_18 && !$flag_19 && !$flag_20 &&
!$flag_21 && !$flag_22 && !$flag_23 && !$flag_24 && !$flag_25 && !$flag_26 && !$flag_28 && !$flag_29 && !$flag_30 &&
!$flag_31 && !$flag_32){
print "Location: $abshtmldir/index.$outputfile\n\n";
}
#############################################################################
これで、ipによる振り分けはできると思います。
ただし、ip帯域については確認していませんし、記述が間違ってるかもしれませんので、ご確認ください。
hostによる振り分けは、
Docomoの場合、docomo.ne.jpがはいると思うので(必ず入るかどうかは未確認)
if( $host !~ /docomo.ne.jp$/i ){print "Location: $abshtmldir/index.$outputfile\n\n";}
これを、
if ($id ne ""){
の後に、記述すればOKかと思うのですが。(未確認)
VodafoneやEzwebのhost名はわかりませんので、各携帯会社に御問い合わせください。
もしくは、おしえてGooで「各携帯のhost名をおしえて」という質問で誰かに教えてもらってください。
#######################################################################
別の方法としてUserAgentによる振り分けもあります。
UserAgent はアクセスしてくれた携帯のブラウザの種類です。
Docomoの携帯からのアクセスならアクセスしたブラウザの種類にDoCoMoという文字が必ずはいります。
Vodafoneの携帯からのアクセスならアクセスしたブラウザの種類にJ-PHONEという文字が必ずはいります。
AUの携帯からのアクセスならアクセスしたブラウザの種類にKDDIという文字が必ずはいります。
ツーカーはよくわかりませんが、UP.Browserでいいとおもいます。
my $useragent = $ENV{'HTTP_USER_AGENT'};
my $flag = 0;
if( $useragent =~ /DoCoMo|J-PHONE|KDDI|UP.Browser/i ){$flag = 1;}
if( !$flag ){print "Location: $abshtmldir/index.$outputfile\n\n";}
これを、
if ($id ne ""){
の後に、記述すればOKかと思います。
#######################################################################
■携帯各社UserAgent情報のページ
●Docomo-UserAgent
http://www.nttdocomo.co.jp/p_s/imode/make/spec/i …
●Vodafone-UserAgent
http://developers.vodafone.jp/dp/tool_dl/web/use …
●Ezweb-UserAgent
http://www.au.kddi.com/ezfactory/tec/spec/4_4.html
いろいろ方法がありますが、
ipによる振り分け--ip帯域が増えたり減ったりする可能性がある。
hostによる振り分け-- 問い合わせたDNSがまちがった値を吐き出す可能性もある。
useragentによる振り分け--DoCoMoやJ-PhoneといったUserAgentoを吐き出すブラウザを作ってPCからアクセスされる可能性も十分ある。
といろいろ問題がありますので、ご自分の判断で好きなものをお使いください。
>hostによる振り分けは、
>Docomoの場合、docomo.ne.jpがはいると思うので(必ず入るかどうかは未確認)
>
>if( $host !~ /docomo.ne.jp$/i ){print "Location: $abshtmldir/index.$outputfile\n\n";}
>
>これを、
>if ($id ne ""){
> の後に、記述すればOKかと思うのですが。(未確認)
>
>VodafoneやEzwebのhost名はわかりませんので、各携帯会社に御問い合わせください。
やりたい事はまさにこれです!
if( $host !~ /\.docomo\.ne\.jp$/){print "Location: http://www.goo.ne.jp/\n\n";}
これを指定箇所に挿入すると、HOST名選別ができました!
inカウントも正常にカウントされていましたし、動作も問題ありません
でした。
上記内容を挿入した場合、ドコモユーザーのみvoteformページへ飛び、
その他のホスト名のユーザーはLocationで指定したgoo.ne.jpに飛び
ました。
ただ、一点だけ、問題が残りました…
上記の様に、指定するホスト名が1つだけなら良いのですが、ホスト名を
複数指定すると、動作がおかしくなるんです。
例えば、
「ドコモ、旧Jフォン、ezwebのみvoteformページへ飛び、その他のホスト名のユーザーはLocationで指定したgoo.ne.jpに飛ばす」
if (($host !~ /\.docomo\.ne\.jp$/) ||($host !~ /\.jp-[hdtckrnqs]\.ne\.jp$/) ||($host !~ /\.ezweb\.ne\.jp$/)){print "Location: http://www.goo.ne.jp/\n\n";}
これだと、ドコモでも何でも関係なくLocationで指定したページに飛び
ます…
Locationしか効いていないみたいなんです。。。
if ($host !~ /\.docomo\.ne\.jp$/){print "Location: http://www.goo.ne.jp/\n\n";}
if ($host !~ /\.jp-[hdtckrnqs]\.ne\.jp$/){print "Location: http://www.goo.ne.jp/\n\n";}
if ($host !~ /\.ezweb\.ne\.jp$/){print "Location: http://www.goo.ne.jp/\n\n";}
これでも結果は同じです。。。
あと一歩というところまで来てる気がするのですが。。。
すみません引き続きアドバイスお願いします。。。
No.4ベストアンサー
- 回答日時:
if (($host !~ /\.docomo\.ne\.jp$/i) && ($host !~ /\.jp-[cdhknqrst]\.ne\.jp$/i) && ($host !~ /\.ezweb\.ne\.jp$/i)){
print "Location: http://www.goo.ne.jp/\n\n";
}
としてみたらいかがでしょう?
これで正常に動くと思うのですが、動作確認してみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ブログ) bloggerのレイアウト→ページリストに入りきらない(テーマ:contempo light) 1 2023/05/12 11:06
- 政治 マイナカード等デジタル化全般の問題点について 2 2022/12/27 18:12
- その他(ブラウザ) IE・edgeで日増しに観られるサイトが減ってくる。 1 2022/10/04 22:40
- WordPress(ワードプレス) ワードプレスで、投稿一覧ページにタグを表示する方法 投稿につけたタグを、記事一覧ページにもカテゴリと 1 2023/05/10 21:41
- iPhone(アイフォーン) マイクロソフトOneDrive にiPhoneの写真がアップされない お世話になります マイクロソフ 3 2022/08/22 13:24
- 画像編集・動画編集・音楽編集 musescore3.5 で再生時、ページスクロールしない 1 2022/11/07 19:29
- アプリ Edgeを操作するアプリについて 4 2023/05/11 22:48
- メルカリ メルカリショップズで出品したいんですが、 運営者情報の公開/非公開と言う欄があって、これは公開すると 1 2022/09/17 14:00
- 電子書籍 中学校のギガスクールPCでTikTokとかサイトを見ようとするとブロックされます。ブロックされずに見 5 2022/05/13 17:12
- WordPress(ワードプレス) WordPressのダッシュボードに入れなくなりました。 サイトのURLの最後にwp-login.p 1 2022/11/04 18:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
細線化のプログラム
-
デバイスコンテキストに書いた...
-
ポインター引数の関数でコンパ...
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
COBOLのCOMP形式について
-
number 改行が追加できない
-
エクセルシート名の制限を変更...
-
ビットスワップとバイトスワッ...
-
バイナリとBCDコード
-
memcmp バイナリデータの比較方法
-
char str[256]の256の意味は?
-
DataGridViewの特定列に入力さ...
-
Javaで日本語1文字のバイト数
-
Excel VBA メール作成について ...
-
機種依存文字をチェックしたい。
-
3バイト文字(UTF-8)をprintfで...
-
unicode←→JISコード
-
ビットからバイトへの変換
-
2byte文字の判定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語でwin32apiを使ってnotepa...
-
デバイスコンテキストに書いた...
-
JavaScriptの条件分岐について(...
-
DOSのdirコマンドで思うように...
-
エラー「書き込み中にアクセス...
-
細線化のプログラム
-
ポインター引数の関数でコンパ...
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
Excel VBA メール作成について ...
-
char str[256]の256の意味は?
-
エクセルシート名の制限を変更...
-
stable diffusionのエラー
-
COBOLのCOMP形式について
-
Excel 1セル当りの文字数が2...
-
DataGridViewの特定列に入力さ...
-
バイナリとBCDコード
-
バイト列とバイナリ列の違いが...
-
ビットスワップとバイトスワッ...
-
ピクセル,dpiから容量(バイト...
おすすめ情報