302 Found 回避方法について
仕様ブラウザ:Firefox
使用OS:Windows XP
使用言語:Perl
例えば、
list.txt:1行に1つのアドレスを複数行書いてあるtxt
location.cgi:list.txtに書いてあるアドレスをランダムに表示させるCGI
の時に、
http://***/location.cgi
のように、HP上に自作のCGIを乗せて、アクセスしたところ
「302 Found
The document has moved here.」
と表示されます。
302Found のhereをクリックして表示された部分のアドレスも
http://***/location.cgiであり、
再び、
「302 Found
The document has moved here.」
と表示されます。以下繰り返しの状況が続きます。
調べたところ、
URIが一時的に移動しているというのがわかったのですが、
解決方法がわからなかったので質問させていただきます。
location.cgiの概要は、以下です。
あと、スタートする前に、隠しフォームで、name="start",value="start"を渡しています。
location.cgi
#!/usr/local/bin/perl
#隠しフォームでstartを持っていたらlist.txtに表示したい全てのURLを書き込む
#%inがフォームからの情報受け取りしています。
if($in{start} =~ /start/){
#list.txtを書き込み専用で開く
#全url(***01~10)を書き込む
open (RESET,">list.txt") or die;
for($num = 1; $num <= 10; $num++){
if($num <= 9){
print RESET "http://***0$num.htm\n";
}else{
print RESET "http://***$num.htm\n";
}
}
close(RESET);
}
#list.txtを読み込み専用で開く
#@linkに読み込み内容を格納
open (READ,"list.txt") or die;
@link = <READ>;
foreach(@link){
chomp($_);
}
close(READ);
if($link[0] !~ /http.*htm/){
#participants.htmへLocation
print"Location: http://***/last.htm\n\n";
#list.txtを書き込み専用で開く
#全url(***01.htm~***10.htm)を書き込む
open (PRINT,">list.txt") or die;
for($num = 1; $num <= 10; $num++){
if($num <= 9){
print PRINT "http://***0$num.htm\n";
}else{
print PRINT "http://***$num.htm\n";
}
}
close(PRINT);
}else{
#@linkの要素をランダム化
srand;
@new = ();
while(@link){
push(@new,splice(@link,rand @link,1));
}
#ランダム化したリンクにLocation
print"Location: $link[0]\n\n";
#list.txtを書き込み専用で開く
#@newの先頭配列を消去してから書き込む
open (PRINT,">list.txt") or die;
shift @new;
foreach(@new){
print PRINT "$_\n";
}
close(PRINT);
}
※配列の中身を消して、list.txtに書きなおしていたりするのは、
非重複でランダムにURLを表示していきたいからです。