柔軟なbase_url

どういうわけか、https経由でページにアクセスするときに、すべての内部リンクもhttpsのオプションに変更されました。 ページビューは異なるURLでロードされるため、相対パスは移動せず( js / script.js )、base_url関数( echo base_url()。 'Js / script.js' )を使用することにしましたが、実際には変数の内容が置換されます$ config ['base_url'] 、これは静的です。
少し検索した結果、解決策が見つかりました-$ config ['base_url']の動的ベースパス。 また、プラスの効果として、ドメイン間でファイルを転送するときにbase_urlを変更する必要がなくなりました。

これらの変更をすぐにsystem / config / config.phpファイルに追加すると最も便利です

$config[ 'base_url' ] = ((isset($_SERVER[ 'HTTPS' ]) && $_SERVER[ 'HTTPS' ] == "on" ) ? "https" : "http" );
$config[ 'base_url' ] .= "://" .$_SERVER[ 'HTTP_HOST' ];
$config[ 'base_url' ] .= str_replace(basename($_SERVER[ 'SCRIPT_NAME' ]), "" ,$_SERVER[ 'SCRIPT_NAME' ]);


より複雑なオプションがあります:
/* Detect ssl connectivity */
if ( isset($_SERVER[ 'HTTPS' ]) ) {
$ssl = $_SERVER[ 'HTTPS' ];
}elseif ( isset($_SERVER[ 'HTTP_FRONT_END_HTTPS' ]) ) {
$ssl = $_SERVER[ 'HTTP_FRONT_END_HTTPS' ];
} else {
$ssl = "OFF" ;
}
$root = (stripos($ssl, "ON" ) !== FALSE) ? "https" : "http" ;

/* Many pages/apps served through the same domain */
if ( isset($_SERVER[ 'HTTP_X_FORWARDED_HOST' ]) ) {
list($host) = explode( ',' , str_replace( ' ' , '' , $_SERVER[ 'HTTP_X_FORWARDED_HOST' ]));
} else {
$host = $_SERVER[ 'HTTP_HOST' ];
}

$root .= "://" .$host;

if ( ! isset($_SERVER[ 'ORIG_SCRIPT_NAME' ]) ) {
$root .= str_replace(basename($_SERVER[ 'SCRIPT_NAME' ]), "" ,$_SERVER[ 'SCRIPT_NAME' ]);
}
else {
$root .= str_replace(basename($_SERVER[ 'ORIG_SCRIPT_NAME' ]), "" ,$_SERVER[ 'ORIG_SCRIPT_NAME' ]);
}

$config[ 'base_url' ] = "$root" ;


Codeigniterフォーラムから取られたコード: 自動構成ベースURL


Source: https://habr.com/ru/post/J58237/


All Articles