やりたいこと
https://example.com?id=1
の様に$_GET['id']
で取得するパラメータに基づいて、動的にウェブページを構成するサイトを作成しております。
ここで、万が一ユーザーがhttps://example.com
とパラメータなしでアクセスしてきた場合、専用のエラーページを描画したいと考えております。
環境
MAMP : ver5.5
php : 7.3.8
htdocsフォルダに格納したファイルに、http://localhost:8888でアクセスしています。
試したこと
そこで以下の様にコーディングをしてみました。
php
1<body> 2 <?php if(is_null($_GET['id'])):?> 3 <p>無効なアドレスです</p> 4 <p><a href="https://example.com/top-page">トップページに戻る</a></p> 5 <?php endif;?> 6</body>
これを実行してみると画面は何も表示されずにブラウザはInternal server error 500
を返してきました。そこで、例えば以下の様にも試してみました。
php
1<?php if(is_null($_GET['id'])):?> 2 <!DOCTYPE html> 3 <html lang="ja" dir="ltr"> 4 <head> 5 <meta charset="utf-8"> 6 <title></title> 7 </head> 8 <body> 9 <p>無効なアドレスです</p> 10 <p><a href="https://example.com/top-page">トップページに戻る</a></p> 11 </body> 12 </html> 13<?php endif;?>
とすると、レンダリングは実行され、描画はされるのですが、コンソールを見るとInternal server error 500
は返されていることが確認できました。
質問
-
一般的に、想定していないパラメータやディレクトリへのアクセスでエラーページを表示させたいアプローチとして、上記のいずれの方法も不適切なのでしょうか?現在はローカル環境で実行していますが、想定としてはレンタルサーバーやAWSといったクラウドサーバーに移管した場合を前提にしております。その場合、
.htaccess
等ウェブサーバー側でこの様なイレギュラーなアクセスについて、対応するのでしょうか?実は今回、上記の様なコードが実現するのであればどの様な環境でも実装できるじゃないかと言う安易な発想からつまずいた次第です。 -
上記の試したことで、単純に疑問に思ったのですが、同じ
Internal server error 500
のレスポンスがあるのに、なぜ後者は描画されるのでしょうか?当該エラーはPHPのミスコーディングによるエラーとして出力されていると言う認識なのですが、かたや一切描画もしない、方やエラーを出力しながら普通に描画はされるこの違いがわかりませんでした。特に後者は描画されている以上は、phpのifは正しく判定している様に思えるのでInternal server error 500
と矛盾している様で不思議でした。もし明るい方がいらっしゃればご教示くださると嬉しいです。
回答1件
あなたの回答
tips
プレビュー