アプリ版:「スタンプのみでお礼する」機能のリリースについて

apache(Version1.3.26)の設定で困っています。
URLからあるディレクトリに参照に行くと403のエラーとなり
"Forbidden"とか"このページの表示が認められていません"とかでると
思います。
このときに、404の"Not Found"、"ページが見つかりません"を出すように
したいのですが、その方法がわかりません。
ErrorDocument で作成したHTMLを表示させることはできるのですが、
HTMLを作成することなくそれを実現させたい。

これらの設定を何もしていない状態だと、IEとFireFox他で見た目が違います。
IEだと"ページが見つかりません"、FireFoxだと"Not Found"で表示されます。
その状態をそのままで403で接続したときにIEだと"ページが見つかりません"、FireFoxだと"Not Found"
がでるようにしたいです。

どなたかご存知の方いらっしゃいましたらご教授をお願いします。

A 回答 (5件)

>HTMLを作成することなくそれを実現させたい。


FireFoxや IEでも「HTTPエラーメッセージを簡易表示する」のオプションを外した設定であれば、、、
ページを指定せずに、と言うことならば httpd.confか.htaccessに直接文章を書くことも出来ます
ErrorDocument 403 "<html><h1>Not Found</h1>
 ( http://httpd.apache.org/docs/2.0/ja/custom-error … )

## IEで「HTTPエラーメッセージを簡易表示する」のオプションが有効なまま(つまり初期状態の)
で、質問文に書かれた通りの事を実現するためには、面倒な作業が必要です
 #条件1: リクエストヘッダのUser-Agent または環境変数HTTP_USER_AGENT などで クライアントがMSIEかどうかを判別し、それぞれに応じたメッセージを表示

 #条件2: MSIEに対してはエラーメッセージが 512バイト以上であること
  ( http://support.microsoft.com/default.aspx?scid=k … の方法3 )
  条件2 をクリアしないと レスポンスコード403に応じた簡易表示のページが表示されてしまいます

###ということで、現実的には
ErrorDocument 403 /cgi-bin/hoge.cgi
などとして CGIを指定して そのCGIで条件1、条件2 をクリアすると言うことになるかと思います 

この回答への補足

早速のご回答ありがとうございます。

上記手順をご紹介頂いたということは、apacheからブラウザに
応答するレスポンスコード403を404にすり返るようなことは
できないということでしょうか?
そのような方法があるかどうかご存知ありませんでしょうか・・・・

補足日時:2006/12/28 09:15
    • good
    • 0

>若しくはperlを使わない方法はご存知でしょうか?


perl以外のでもCGIならばどっちみち前記の設定は必要ですが、、、
PHPだと、、、私には良くは判りませんが以下のソースで出来たみたいです??
 ( http://search.net-newbie.com/php/function.header …
  http://iwamode.net/etc/cgi_env_param_sample_php. … を参考に書いてみました )

<?php
header("HTTP/1.0 404 Not Found");
?>
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL <?php echo$_SERVER["REQUEST_URI"] ?> was not found on this server.</p>
</body>
</html>

以上を hoge.phpなどのfile名で設置し
ErrorDocument 403 /hoge.php などと指定
    • good
    • 0
この回答へのお礼

ありがとうございます。
うまくいきました。

お礼日時:2007/01/12 16:22

お答えをCGIとphpの2つに分けます。

 まずはCGIから
>早速試してみたところ動かない・・・・
そもそもCGIを動かす方法が判らないようですね、、、
その症状からするとCGIとしてではなくHTMLとして認識されています。
cgi-binフォルダの中に入れたという事であればScriptAliasに設定されていません。
httpd.confの中に
ScriptAlias /cgi-bin/ /home/httpd/cgi-bin/
と言う記述がある筈ですが(無論 #でコメントアウトされていたら無効ですが)
この場合なら /home/httpd/cgi-bin/ に hoge.cgi を置くと
http://ホスト名/cgi-bin/hoge.cgi でアクセスしてCGIとして動きます
 (勿論パーミッションやuidも適切に)

cgi-binフォルダ以外なら
Options ExecCGI と
AddHandler cgi-script .cgi  の設定=>Apacheの再起動が必要です
    • good
    • 1
この回答へのお礼

おっしゃるとおりcgiを動かす方法がわかっていません・・・・
PHPでやる方法で実現できたので、とりあえずは目的を達成できました。
今は少し時間がないので、今回教えて頂いたcgiの動かし方も
試してみます。ありがとうございました。

お礼日時:2007/01/12 16:24

ErrorDocument 403 /cgi-bin/hoge.cgi


として
/cgi-bin/hoge.cgiの内容を
#! /usr/bin/perl
print <<HTML;
Status: 404
Content-type: text/html

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL $ENV{'REQUEST_URI'} was not found on this server.</p>
HTML
__END__

これで、出来るようです。
注意点1. Content-type: text/htmlの下の空行は必ず入れてください
注意点2. <!DOCTYPE ~ </p> 迄のHTML文はFireFoxで一旦わざと存在しないURLを入力して
   表示されたエラーページのソースを参考にしてください
注意点3. 前述の理由から HTML文は512バイトを超えないようにしてください
  (と言うか、このスクリプトのままで大丈夫の筈ですが)

## 実はCGIによって Status: 404 を出力する方法は
 回答2を書く前に 頭に浮かんだのですが、
 過去に同様の事をしようと思ってうまくいかなかった様な
 覚えが有った気がして#2には書きませんでした
 しかし、今試したところ出来たようですので、思い違いだったようです。

この回答への補足

ご回答ありがとうございます。

早速試してみたところ動かない・・・・
-------------------------------------------------
#! /usr/bin/perl print <
Not Found
The requested URL $ENV{'REQUEST_URI'} was not found on this server.

HTML __END__
-------------------------------------------------
と出てきました。
サーバ上でperlが動くかどうか試したところ
動いたのでperlが動かないわけではないようです。
少し話しが脱線してしまいますが、ダメな理由に心当たりはありますか?
若しくはperlを使わない方法はご存知でしょうか?
ちなみにPHPなら動きます。

補足日時:2007/01/09 14:23
    • good
    • 0

IEやFireFoxのブラウザが出す404のページを表示させることができるかどうかはわかりませんが、403などのエラーページ自体はカスタマイズできます。

下記URLを参照してください。
http://www.shtml.jp/htaccess/404.html

これで、403と404の両方を同じエラー画面が出るように設定すればいいのではないでしょうか。

この回答への補足

早速のご回答ありがとうございます。

カスタマイズしたエラーページですと、IEの「HTTPエラーメッセージを簡易表示する」という設定のせいで
403が出てしまいます。この設定をそのままに条件をクリアしたいです。

ブラウザに返すレスポンスコード403を404にすり返ることが
出来ればいいのですが、そのようなことが可能かどうかご存知でしょうか?

補足日時:2006/12/28 09:22
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!