🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

1389閲覧

IIS カスタムエラーページに係る質問

anonymous46

総合スコア7

IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2019/11/22 01:03

編集2019/11/22 02:29

IISのカスタムエラーページについて教えて下さい。

IISの状態コード404のエラーページに遷移した際、
特定のエラー画像ファイルを表示させ、クライアントには200の状態コードを返すよう設定したいです。

この時、"このサイトでURLを実行"を用いる事となると思いますが、
面倒な環境でして、上手く設定する方法が思いつきません。お知恵を拝借させて頂ければと思います。

(なお、例えば"このサイトでURLを実行"ではなく"静的ファイルのコンテンツをエラー応答に挿入"を利用した場合、
404のエラーページに遷移した時、特定のエラー画像ファイルを表示させることはできますが、
状態コード404が返ってしまう為、選択肢から外れています。)

#【環境】
サーバA,サーバBの2台のサーバが存在します。
両サーバは同一のNAS領域(以下NAS)をマウントしており、これを仮想ディレクトリとしてIISに設定しています。
ただし、この仮想ディレクトリのエイリアス設定がサーバA,サーバBで違っており
サーバAは「NASa」、サーバBは「NASb」というエイリアスで設定が行われています。
ディレクトリ構成は以下のようになっています。

[NAS][ImageFolder]
. ├・Sample.jpg
. ├・Error.jpg
. └・web.config
(凡例 []フォルダ、・ファイル
3つファイルはImageFolderにあります。)

#【期待する動き】
http://サーバAIPアドレス/NASa/ImageFolder/Sample.jpg をIEで開いた時、存在するので正しく開ける事。
http://サーバAIPアドレス/NASa/ImageFolder/hogehoge.jpg をIEで開いた時、存在しないのでError.jpgが返る事(URLはリダイレクトされない)
http://サーバBIPアドレス/NASb/ImageFolder/Sample.jpg をIEで開いた時、存在するので正しく開ける事。
http://サーバBIPアドレス/NASb/ImageFolder/hogehoge.jpg をIEで開いた時、存在しないのでError.jpgが返る事(URLはリダイレクトされない)

#【問題】
"このサイトでURLを実行"はルートに対する相対パスを記載する必要があります。
要は期待する動き②を達成したい時、サーバAとしては「/NASa/ImageFolder/Error.jpg」という記載を行うことになります。
問題は、web.configは仮想ディレクトリに紐づくため、別のエイリアス名で設定されているサーバBとconfigファイルを共有してしまうことです。
サーバBとしては「/NASb/ImageFolder/Error.jpg」と記載されていてほしいのに、"/NASa/"と書かれているため、開く事が出来ないのです。

#【制約】
・サーバA、サーバBのNASの仮想ディレクトリエイリアスをどちらかのサーバに寄せる設定変更を行うことは出来ません。
・wwwroot等、NASより手前にエラー画像ファイルを配置する事は出来ません。

#【質問事項】
web.configに何か加筆を行うことで、上手く期待する動き①~④(というか、②と④)を達成することは出来ますでしょうか。

分かりづらい文章になっていたら申し訳ありません。回答に不足している情報があれば追記致しますのでご指摘下さい。
なにとぞよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/11/22 01:19 編集

IIS のバージョンは? ASP.NET は無関係? 表題に「カスタムエラーページ」とありますが、違いますよね? フォルダ内に要求された画像ファイルが存在しない場合、「カスタムエラーページ」ではなくて、単に代替えの画像を返したいというだけですよね?
anonymous46

2019/11/22 01:57

IIS10(10.0.14393.0)になります。 ASP.NETは導入しております。 別途設定は行なっておりません。(役割と機能の追加でチェックを入れて追加までした、という形です) こちらにも設定が必要でしょうか。 期待する動作はおっしゃる通りです。custerrの中身やhtmlを返したいというわけではなく、特定の画像を返したいというのが思いです。 仮装ディレクトリの"エラーページ"で状態コード404を編集する際、"カスタムエラーページの編集"というウィンドウ("静的ファイル…"や"このサイトでURL…"を選ぶ画面です。) が立ち上がるためこのように記載させて頂きました。 厳密性に欠く記載となってしまっておりましたら申し訳ありません。
退会済みユーザー

退会済みユーザー

2019/11/22 02:00

回答が入れ違いになってしまいましたが、回答欄に書いたように ASP.NET の HTTP ハンドラを使うのがお勧めです。検討してみてください。
退会済みユーザー

退会済みユーザー

2019/11/22 02:05

ASP.NET のタグを付けてください。
guest

回答1

0

ベストアンサー

質問へのコメントに対する返事がないですが、このスレッドを忘れてしまわないうちに回答を書いておきます。

IIS カスタムエラーページに係る質問

IIS で言う「カスタムエラーページ」なら URL Rewrite Module を使って何かできそうな気がしますが(気がするだけで深く考えたわけではないです)、返したいのは「カスタムエラーページ」ではないですよね?

フォルダ内に要求された画像ファイルが存在しない場合、「カスタムエラーページ」ではなくて、代替えの画像 Error.jpg を普通に HTTP 200 応答で返したいというだけですよね?

上の理解が正しくて、ASP.NET が使えるなら、ASP.NET の HTTP ハンドラを実装してそれを使うのがお勧めです。

具体例は、以下の記事の「(1) 画像用の HTTP ハンドラ」のコードを見てください。そこで if (fileInfo.Exists) が true なら要求された画像ファイルを、false なら Error.jpg を返すということで容易にやりたいことはできると思います。

HTTP ハンドラでキャッシュコントロール
http://surferonwww.info/BlogEngine/post/2015/05/19/cache-control-by-using-http-handler.aspx

ASP.NET でなくても、PHP とかの Web アプリを実装しているなら、同等のことができないか検討してはいかがですか?

投稿2019/11/22 01:57

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

anonymous46

2019/11/25 04:19

週明けの回答となり申し訳ありません。 詳しくありがとうございます。検討の上検証してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問