Establecer la URL base dinámica en CodeIgniter

Necesito establecer la url base dinámica en codeigniter debido a algunas de las siguientes razones.

  • Localhost para desarrollo y reinicio cuando se ponga en marcha.
  • Aplicación única accesible desde múltiples dominios.
  • la dirección ip puede cambiar debido a dhcp (localmente)

CodeIgniter descubrirá la base_url por sí mismo, por lo que solo puedes hacer:

 $config['base_url'] = ''; 

Solo necesito compartir mi conocimiento, ya que encontré la respuesta como se menciona a continuación.

Simplemente sobrescriba la línea en config / config.php con lo siguiente:

 $config['base_url'] = 'http://'.$_SERVER['HTTP_HOST'].'/'; 

Si está utilizando la subcarpeta, puede usar el siguiente código:

 $root = "http://".$_SERVER['HTTP_HOST']; $root .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']); $config['base_url'] = "$root"; 

Al igual que decir en la documentación:

En caso de que necesite permitir, por ejemplo, que se utilicen dinámicamente varios dominios, o prefijos http: // y https: //, dependiendo de la solicitud, recuerde que application / config / config.php sigue siendo un script PHP, en el que puede Crea esta lógica con unas pocas líneas de código. Por ejemplo:

 $allowed_domains = array('domain1.tld', 'domain2.tld'); $default_domain = 'domain1.tld'; if (in_array($_SERVER['HTTP_HOST'], $allowed_domains, TRUE)) { $domain = $_SERVER['HTTP_HOST']; } else { $domain = $default_domain; } if (! empty($_SERVER['HTTPS'])) { $config['base_url'] = 'https://'.$domain; } else { $config['base_url'] = 'http://'.$domain; } 

También puedes probar esto.

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

Estoy de acuerdo con la respuesta de Janith pero tengo una solución mejor y más fácil.

Establezca el elemento de configuración en cualquier archivo de configuración (por ejemplo, lo uso en route.php), se reiniciará base_url antes de usarlo en el Controlador.

 $lang_code = 'en'; $root_domain = 'test.org'; $base_domain_url = 'http://' . $lang_code . '.' . $root_domain; $this->config->set_item('base_url', $base_domain_url); 

Pruébelo en el controlador:

 echo base_url(); 

Resultado:

 http://en.test.org 

También puedes usar …

 $root = "http://".$_SERVER['HTTP_HOST']; $root .= dirname($_SERVER['SCRIPT_NAME']); $config['base_url'] = $root; 

Esto funcionará para la línea de comandos, localhost y producción.

 $protocol = is_https() ? "https://" : "http://"; $host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : ""; if(is_cli()) { $config['base_url'] = ''; } elseif(stristr($host, "localhost") !== FALSE || (stristr($host, '192.168.') !== FALSE) || (stristr($host, '127.0.0') !== FALSE)) { $config['base_url'] = $protocol.$host."/PROJECT_FOLDER/"; } else { $allowed_hosts = ['sajansaj.com', 'www.sajansaj.com']; $config['base_url'] = in_array($host, $allowed_hosts) ? $protocol.$host."/" : "we-do-not-recognise-this-host.com"; }