¿Cómo puedo hacer que CodeIgniter cargue páginas específicas usando SSL? Tengo un servidor apache2/mode_ssl
. mod_ssl
utiliza una raíz de documento diferente que las páginas no seguras. Por ejemplo, https (puerto 443) serviría páginas fuera de /var/www/ssl_html/
Y http (puerto 80) sirve páginas de /var/www/html/
. ¿Cómo obtendré CodeIgniter para jugar bien con esta configuración?¿Cómo puedo hacer que CodeIgniter cargue páginas específicas usando SSL?
Respuesta
Hay pocas maneras de abordar esto.
Opción 1:
que probablemente tendría el código desplegado a ambas carpetas, a continuación, en el archivo: /system/application/config/config.php, configurar su página a:
$config['base_url'] = "http://www.yoursite.com/";
o
$config['base_url'] = "https://www.yoursite.com/";
a continuación, en la carpeta de VirtualHost no SSL, establecer su configuración para redirigir las páginas protegidas por carpeta al sitio SSL:
RedirectPermanent /sslfolder https://www.yoursite.com/sslfolder
Opción 2:
Enviar todo para SSL y mantener todo el código en una carpeta
/system/application/config/config.php, configurar su página a:
$config['base_url'] = "https://www.yoursite.com/";
Otras opciones
Existen algunas formas más extravagantes de hacerlo con los redireccionamientos de encabezado(), etc., pero no creo que quiera mantener diferentes bases de código para esta opción. No lo recomiendo, pero podría hacer algo como:
$config['base_url'] = “http://” . $_SERVER['http_host'] . “/”;
Aquí hay una buena solución. http://sajjadhossain.com/2008/10/27/ssl-https-urls-and-codeigniter/
Mantendría dos conjuntos del código y manejaré un redireccionamiento forzado a páginas HTTPS con un enganche post_controller_constructor. Se llamará al gancho antes de que se represente cada página para verificar si el visitante debe ser redirigido a HTTPS en función de su ubicación actual en su sitio.
PASO 1
Crear archivo: system/application/ganchos/SecureAccount.php
<?php
class SecureAccount
{
var $obj;
//--------------------------------------------------
//SecureAccount constructor
function SecureAccount()
{
$this->obj =& get_instance();
}
//--------------------------------------------------
//Redirect to https if in the account area without it
function index()
{
if(empty($_SERVER["HTTPS"]) || $_SERVER["HTTPS"] !== 'on')
{
$this->obj =& get_instance();
$this->obj->load->helper(array('url', 'http'));
$current = current_url();
$current = parse_url($current);
if((stripos($current['path'], "/account/") !== false))
{
$current['scheme'] = 'https';
redirect(http_build_url('', $current), 'refresh');
}
}
}
}
?>
PASO 2
Personalizar la ruta en la función para la que áreas de su sitio deben ser forzados para usar HTTPS
PASO 3
Añadir lo siguiente a sistema/aplicación/config/hooks.php
/* Force HTTPS for account area */
$hook['post_controller_constructor'] = array(
'class' => 'SecureAccount',
'function' => 'index',
'filename' => 'SecureAccount.php',
'filepath' => 'hooks',
'params' => array()
);
En application/config/config.php, establecer base_url a:
$config['base_url'] = ($_SERVER['SERVER_PORT'] == 443 ? 'https' : 'http') . "://{$_SERVER['HTTP_HOST']}/";
Esto permitirá que funcione en cualquier dominio, que es conveniente si se prueba de forma local.
Lo utilicé con éxito en combinación con: RewriteCond% {HTTPS} = desactivado RewriteRule^my-secure-url-segment https: //% {HTTP_HOST}% {REQUEST_URI} [R = 301, L] en mi archivo .htaccess. – prograhammer
No funcionó para mí, $ _SERVER ['SERVER_PORT'] para mí es 80; HTTP_X_FORWARDED_PORT es 443 – fedmich
puse siguientes líneas en el archivo de ./application/config/config.php y funciona perfectamente:
$protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https' : 'http';
$config['base_url'] = $protocol.'://www.yoursite.com';
me resolvió el problema en config.php
$config['ssl_active'] = false;
if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) {
$config['ssl_active'] = true;
}
$config['base_url'] = ($config['ssl_active'] === true)?"https":"http" . $_SERVER['HTTP_HOST'];
El problema directorio , puede usar un simple enlace simbólico ln -s
Esto es lo que funcionó para mí. Nuestro servidor ambos tienen $ _SERVER [ 'SERVER_PORT'] y $ _SERVER [ 'HTTP_X_FORWARDED_PORT']
Debemos comprobar primero si $ _SERVER [ 'HTTP_X_FORWARDED_PORT'] está disponible y utilizar esto en vez de $ _SERVER [ 'SERVER_PORT']
$config['base_url'] =
(((empty($_SERVER['HTTP_X_FORWARDED_PORT']) ? $_SERVER['SERVER_PORT'] : $_SERVER['HTTP_X_FORWARDED_PORT']) == 443 ? 'https' : 'http') . "://" . $_SERVER['HTTP_HOST'])
. str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']) ;
probado esto en nuestro servidor Linux ...
por cierto, se basa en la respuesta de Skyler antes de que fuera.
$config['base_url'] = ($_SERVER['SERVER_PORT'] == 443 ? 'https' : 'http') . "://{$_SERVER['HTTP_HOST']}/";
Las respuestas anteriores no mantienen script_name si CI se implementa en un subdirectorio, debemos conservar esto. str_replace (nombre base ($ _ SERVER ['SCRIPT_NAME']), "", $ _ SERVER ['SCRIPT_NAME']) – fedmich
puedo fácilmente, lo único que definir:
$config['base_url'] = '';
CI get base_url = automática D
Ya no se recomienda, solo para tu información. – twistedpixel
sí, CI3 en config.php dice "NO DEBE utilizarse en producción". – 2114L3
la solución que me vino a la mente es utilizar str_replace() de esta manera
$base_url_str = base_url();
$secure_base_url = str_replace("http","https",$base_url_str);
cada vez que necesito una ubicación segura, uso $ secure_base_url en lugar de base_url(), por lo que digamos que su base_url() es http://www.example.com luego $ secure_base_url será https://www.example.com
otra question es similar a este
puede utilizar un URL relativa al protocolo que mantendrá la persistencia en la vinculación de la IC.
en su lugar de config.php
:
$config['base_url'] = 'http://example.com/';
de venta;
$config['base_url'] = '//example.com/';
información sobre enlaces relativas al protocolo here.
- 1. Cómo hacer que PagerAdapter cargue todas las páginas
- 2. ¿Cómo hago que page_action aparezca para páginas específicas?
- 3. ¿La mejor manera de hacer páginas de administración en CodeIgniter?
- 4. CakePHP: ¿incluye CSS basado en páginas específicas?
- 5. ¿Cómo puedo hacer que una forma cargue antes que la otra en C#?
- 6. htaccess redirigir 4 páginas específicas a https
- 7. ¿Cómo puedo hacer un proxy web MUY simple usando ASP.NET?
- 8. cómo hacer que python cargue dylib en osx
- 9. ¿Cuál es la mejor práctica para restringir páginas específicas a los usuarios que inician sesión solo en Codeigniter?
- 10. ¿Cómo puedo evitar que R cargue un paquete?
- 11. Elimine completamente ViewState para páginas específicas
- 12. PHP ocultar div en páginas específicas?
- 13. ¿Cómo puedo desactivar el autoprendimiento en carpetas específicas usando htaccess?
- 14. IIS Express: hacer que SSL funcione
- 15. creación XML usando CodeIgniter
- 16. Usando C# ¿puedo hacer una conexión SSL usando la Indicación del nombre del servidor (SNI)?
- 17. ¿Cómo puedo hacer que las páginas de GitHub usen la rama principal?
- 18. Usando Maven, ¿cómo ejecuto pruebas específicas?
- 19. ¿Cómo hacer que Sinatra funcione a través de HTTPS/SSL?
- 20. enviar correo html usando codeigniter
- 21. ¿Cómo reescribir desde solicitudes http a https en páginas específicas de mi sitio?
- 22. ¿Cómo hacer que las páginas php/html sean seguras/https?
- 23. ¿Cómo puedo verificar que las páginas web estén comprimidas?
- 24. ¿Cómo puedo hacer que el cliente xmlrpc de ruby ignore los errores del certificado SSL?
- 25. Deshabilitar la ejecución de JavaScript en páginas específicas (HTML/PHP)
- 26. Forzar SSL para rutas específicas en Rails 3.1
- 27. ¿Cómo podemos implementar SSL en las páginas de Drupal?
- 28. cómo hacer la programación de socket ssl
- 29. INSERTAR IGNORAR usando Codeigniter
- 30. wcf net.tcp usando SSL
Gracias. Creo que voy a ir con la primera opción y luego reescribir el url_help para manejar https. – ammonkc
La respuesta simple es establecer '' $ config ['base_url'] '' en una cadena vacía, como en '' = ''; '' - CodeIgniter autodetectará todo basándose en la URL.Como resultado, puede abrir arbitrariamente cualquier página con o sin SSL, simplemente escribiendo la URL. No es necesario dividir el contenido entre los directorios ssl y non_ssl en su servidor. – f055
solo FYI, este '$ config ['base_url'] =" http: // ". $ _SERVER ['http_host']. "/"; 'Es incorrecto, debería ser' $ config ['base_url'] \t = 'https: //'. $ _SERVER ["HTTP_HOST"]. '/'; 'La sintaxis es incorrecta y $ _SERVER [" http_host "] (minúsculas) no existe ... –