433以外のポートでのhttps使用

メッセージ

433以外のポート番号でhttpsを使用した場合強制的にページ内のリンクがhttpになってしまいます。

原因は/lib/func.phpの get_script_uri()で以下のように コーディングされているのが原因だと思います。

$script  = (SERVER_PORT == 443 ? 'https://' : 'http://');
$script  = (SERVER_PORT == 443 ? '/' : '/');
$script .= SERVER_NAME; // host
$script .= (SERVER_PORT == 80 ? '' : ':' . SERVER_PORT);

$scriptへURIを直接書けばよいという意見も考えられますが、LAN内から見られなくなるため、この方法は使いたくありません。(DNSサーバをLAN内に立てれと言わないでください)

最初これら4行をコメントアウトして、ページ内のリンクを相対URIにすればよいと考えましが、BugTrack/341 に相対URIだと絶対指定のURLを吐くプラグインで問題が出ると書いてあるためこの方法も使わない方がよいと思ってます。 ちなみに、BugTrack/341には回避策として

$script='pukiwiki.php'

とすればよいとも書いてありますが(もちろん絶対指定のURLが必要なプラグインは捨てることになる)、is_url()でチェックされエラーとなってしまい、設定ファイルで一時的に回避することも現在はできません。

$scriptは相対URIにして、絶対URIが必要なプラグインが絶対URIを使えるように、絶対URIのための変数をpukiwiki.ini.phpに追加してはどうでしょうか?もちろんこの方法でも絶対URIが必要なプラグインへの障害は発生しますが、WAN or LANのどちらかは最低限プラグインを使用することができます。


$script  = (SERVER_PORT == 443 ? 'https://' : 'http://');
$script .= SERVER_NAME; // host
$script .= (SERVER_PORT == 80 ? '' : ':' . SERVER_PORT);

  ↓以下のように変更

if (isset($_SERVER['HTTPS'])) {
        $script = 'https://' . SERVER_NAME;
        $script .= (SERVER_PORT == 443 ? '' : ':' . SERVER_PORT);
} else {
        $script = 'http://' . SERVER_NAME;
        $script .= (SERVER_PORT == 80 ? '' : ':' . SERVER_PORT);
}


*1 phpinfo()の“PHP Variables”の部分で確認できます

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-09-04 (月) 21:45:16
Site admin: PukiWiki Development Team

PukiWiki 1.5.3+ © 2001-2020 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.261 sec.

OSDN