質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

5526閲覧

PHPで現在アクセスされているページのURLを取得(https)したい

kapimako

総合スコア39

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/01/24 09:07

編集2017/01/24 09:09
echo (empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];

上記の意味ですが、
($_SERVER["HTTPS"]) httpsでアクセスされたら http:// を頭につけて 違う場合は、 https://を頭につける。
という意味でしょうか?

echo (empty($_SERVER["HTTPS"]) ? "https://" : "http://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];

上記のように逆にした場合、 httpsでアクセスされたら https:// を頭につけて 違う場合は、 http://を頭につける。
という意味でしょうか??

下のコードの場合、httpsのURL(リダイレクトされて、ブラウザの上部アドレスバーに出る)にもかかわらず、http://で出力(ソース)されてしまいますので、意味を間違えてるか、書き方が違うのか・・・

やりたいことは、https でアクセスされるという前提で(リダイレクトかけてます)、canonicalタグにURL(フルパス)を出力させたいのですが、上記のやり方は違うのでしょうか?なぜ違うか教えていただけますとありがたいです。。

または、下記のようにしたら同じ意味でしょうか?

<link rel="canonical" href="<?php echo (("https://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]); ?>" />

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

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

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

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

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

guest

回答2

0

ベストアンサー

httpsでアクセスされたら http:// を頭につけて 違う場合は、 https://を頭につける。

という意味でしょうか?

逆です。

PHPのマニュアルには、$_SERVER["HTTPS"]は以下のように説明されています。
http://php.net/manual/ja/reserved.variables.server.php

'HTTPS'

スクリプトが HTTPS プロトコルを通じて実行されている場合に 空でない値が設定されます。

そして、emptyは以下のように説明されています。
http://php.net/manual/ja/function.empty.php

返り値

var が存在し、かつその値が空や0でなければ FALSE を返します。 それ以外の場合は TRUE を返します。

つまり、empty($_SERVER["HTTPS"])

  • HTTPS でアクセスされた => false
  • それ以外でアクセスされた => true

となります。

よって、empty($_SERVER["HTTPS"]) ? "http://" : "https://"

  • HTTPS でアクセスされた => "https://"
  • それ以外でアクセスされた => "http://"

となります。


または、下記のようにしたら同じ意味でしょうか?

「https でアクセスされるという前提」
であれば、その書き方でも良いと思います。
さもなければ、以下のように書いておくのが無難です。

php

1<?php $url = (empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; ?> 2<link rel="canonical" href="<?php echo $url; ?>" />

投稿2017/01/24 09:39

編集2017/01/24 09:41
KiyoshiMotoki

総合スコア4791

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

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

kapimako

2017/01/24 10:23

KiyoshiMotoki様、とても丁寧に説明してくださり、ありがとうございます。emptyのことを考えていませでした。。。すみません。これが例えば、単に出力するだけの何か、、、echoとかstringだったら三項演算子の 式?真:偽 だった。という理解であってますでしょうか?
KiyoshiMotoki

2017/01/24 11:32

> echoとかstringだったら三項演算子の 式?真:偽 だった。という理解であってますでしょうか? まずはご自分で確かめてみてください。 以下のように単純化したコードを書いてみれば、ご自身の環境で簡単に確認できるはずです。 ------------------------------------------------------  <?php  $_SERVER["HTTPS"] = 1;  echo $_SERVER["HTTPS"] ? "http://" : "https://"; ------------------------------------------------------
kapimako

2017/01/24 13:44 編集

アドバイスありがとうございます! 自分のPCではhttpでリクエストされ、httpと表示されました。 ためしに、=0にしたらhttpsで出力されましたが、説明ができないのでわかってないようですね。。。難しい。。。調べてみます。ありがとうございました!頑張ります。
guest

0

式 ? 真 : 偽;

$siki = "http";

echo $siki == "http" ? "http" : "https";

結果
http

$siki = "https";

echo $siki == "http" ? "http" : "https";

結果
https

投稿2017/01/24 09:10

編集2017/01/24 09:15
earnest_gay

総合スコア615

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問