- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SSLと非SSL対応、且つ複数階層対応の記述方法)
SSLと非SSL対応、且つ複数階層対応の記述方法
このQ&Aのポイント
- SSLと非SSL対応、複数階層に対応するためにはどのように記述すれば良いのかわからない
- 相対パスでは複数階層に対応できず、絶対パスの使用が必要
- httpsまたはhttpを取得し、それに基づいて分岐させることで対応可能
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
基本的に、環境変数を見ます。($_SERVER変数ですね) 共有SSLとか、レンタルサーバだったりするとまた色々対策を取らなければいけないんですが、 SSLでのアクセスか判断する材料として、 $_SERVER['HTTPS'] === 'on' →HTTPSというキーに「on」が入っているかどうかで判断。普通のHTTPプロトコルの場合は、存在自体しないので isset($_SERVER['HTTPS'])で確認するのもありかも。 $_SERVER['SERVER_PORT'] == '443' →サーバのポートを見て、80だったら通常のHTTP、443だったらSSLと判断します。 ※番外編で、さくらインターネットの共有SSLの場合、どちらも入ってこないので、 isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR']) この環境変数が吐かれているかどうかで判断出来るとのことでした。 また、上記のような方法でSSLか否かの判別ができたら、HTMLの記述に、「base」タグというものがあるので、 <base href="<?php echo $uri?>" /> としてやって、相対パスで記述されたURIの基準となるURIを指定してやることで、普通に相対パスで引けます。 http://www.htmq.com/html/base.shtml 後は、PHPで判断する必要がなくなる方法として、相対パスの記述方法で、 <img src="/yourdir/img/filepath.jpg" /> などと、頭に「/」から始めるように記述すれば、プロトコルに関係なく、ドメイン以下のディレクトリに対して絶対パスが引けます。
お礼
ご回答ありがとうございます。 ご教示いただいた3点すべての方法で意図した動作になりました。 このたびはどうもありがとうございました。