4

と の両方のプロトコルで表示できる Web サイトがhttpあります。ここでの問題は、リンクとアセットが、Web サイトが表示されているプロトコルを反映している必要があることです。https

1つの解決策は相対リンクを使用することですが、特定の理由により、相対リンクを使用できないため、代替手段を見つける必要がありました...

現在のプロトコルを使用するには、次のようにリンクを作成できることを最近知りました。

<a href="//www.example.net/test/">Test</a>

今までは以下のものを使用していました。

<?php

    // Get the current protocol
    $_PROTOCOL = $_SERVER['HTTPS']=='on' ? 'https://' : 'http://';

?>

<a href="<?php echo $_PROTOCOL; ?>www.example.net/test/">Test</a>

最初の解決策は機能しますが、それがどのように機能し、信頼できるかどうかに慣れていないことに最近気づきました。古いブラウザーが気に入らないかもしれないことは承知していますが、これは非常に古いブラウザーにすぎないため、気にしません (どうやら)。

私のウェブサイトの 1 つのサイトマップを生成しようとしたとき、URL は次のように非常に奇妙に書かれていました。

http://beta.example.net///venue/

それ以外の

http://beta.example.net/venue/

どうしてこれなの?これは私が使用しているリンクのためですか?

大量のコードを使用するにもかかわらず、元の (PHP) ソリューションの方が優れていますか?

4

3 に答える 3

3

通常の URL を使用したい場所ならどこでも「//example.net」を使用できます。これは、標準の §4.2 に準拠した形式です。RFC 3986。


ただし、URL のスキームをクリーンな方法で変更したい場合は、次を使用できますhttp_build_url

http://php.net/manual/en/function.http-build-url.php

このような:

http_build_url("http://yoururl.org", array('scheme'=>'https')); // changes to https://
于 2012-12-05T08:50:02.620 に答える
0

余分なスラッシュを示すリンクで説明した問題を再現するコードを提供しませんでした。私の推測では、使用しているコードは URI 全体をアセンブルしようとしており、連結している部分には末尾/先頭のスラッシュがあります。

$_SERVER['HTTPS'] 変数は、定義された動作を知るためだけに、「オン」に設定されるとは限りません。manual に従ってfalse 以外の値に設定されているだけですが、ここで提供したコードでは問題になりません。

プロトコル相対 URL を使用することは、リクエストごとに URI を再構築するために PHP に余分な作業を行わせるよりも確実に望ましい方法であり、エラーも発生しやすくなります。必要と思われる場合はプロトコル相対 URL を使用することをお勧めしますが、一般的に言えば、HTTPS を使用するかどうかにかかわらず、ゼロからサイトを構築することをお勧めします。プロトコルの相対 URL を使用すると、一部のブラウザー (IE など) で警告が表示されたり、ページの SSL が壊れていることがユーザーに通知されたりする場合があります。

安全な転送が必要な場合は、これらのことを常に確認し、徹底的にテストする必要があります。誤ってhttp://foobar.com/img.jpgを挿入したり、AJAX 要求を HTTPS ではなく HTTP 経由で誤って送信したりすると、そのページの SLL アイコンがユーザーのブラウザーで突然壊れてしまいます。

于 2012-12-05T09:04:25.267 に答える
0

サイトマップの間違ったリンクは、ジェネレーターが間違っているためです。最善の解決策は、サイトマップ ジェネレーターを更新して、正常に動作するようにすることです。簡単な解決策は、$protocol を使用することです。

于 2012-12-05T08:52:44.160 に答える