Come posso caricare CodeIgniter su pagine specifiche utilizzando SSL? Ho un server apache2/mode_ssl
. mod_ssl
utilizza una radice del documento diversa rispetto alle pagine non protette. Ad esempio, https (porta 443) servirebbe pagine fuori /var/www/ssl_html/
E http (porta 80) serve pagine fuori /var/www/html/
. Come potrei ottenere CodeIgniter per giocare bene con questa configurazione?Come posso caricare CodeIgniter su pagine specifiche utilizzando SSL?
risposta
Ci sono alcuni modi per affrontarlo.
Opzione 1:
mi avrebbe probabilmente il codice distribuito a entrambe le cartelle, quindi nel file: /system/application/config/config.php, impostare la pagina per:
$config['base_url'] = "http://www.yoursite.com/";
o
$config['base_url'] = "https://www.yoursite.com/";
Poi nella cartella VirtualHost non SSL, impostare la configurazione per reindirizzare pagine protette da cartella al sito SSL:
RedirectPermanent /sslfolder https://www.yoursite.com/sslfolder
Opzione 2:
Invia tutto per SSL e mantenere tutto il codice in una cartella
/system/application/config/config.php, impostare la pagina per:
$config['base_url'] = "https://www.yoursite.com/";
Altre opzioni
Ci sono altri modi hacky per farlo con i reindirizzamenti header() ecc., Ma non credo che vogliate mantenere basi di codice differenti per questa opzione. Non consiglio questo, ma si potrebbe fare qualcosa di simile:
$config['base_url'] = “http://” . $_SERVER['http_host'] . “/”;
Ecco una buona soluzione. http://sajjadhossain.com/2008/10/27/ssl-https-urls-and-codeigniter/
Vorrei mantenere due set del codice e gestire un reindirizzamento forzato alle pagine HTTPS con un hook post_controller_constructor. L'hook verrà chiamato prima che ogni pagina venga sottoposta a rendering per verificare se il visitatore debba essere reindirizzato a HTTPS in base alla posizione corrente sul tuo sito.
FASE 1
creare il file: system/application/ganci/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');
}
}
}
}
?>
FASE 2
Personalizzare il percorso nella funzione per la quale le aree del vostro sito dovrebbero essere costretti usare HTTPS.
FASE 3
Aggiungere quanto segue system/application/config/hooks.php
/* Force HTTPS for account area */
$hook['post_controller_constructor'] = array(
'class' => 'SecureAccount',
'function' => 'index',
'filename' => 'SecureAccount.php',
'filepath' => 'hooks',
'params' => array()
);
In application/config/config.php, impostare base_url a:
$config['base_url'] = ($_SERVER['SERVER_PORT'] == 443 ? 'https' : 'http') . "://{$_SERVER['HTTP_HOST']}/";
Ciò permetterà di lavorare su qualsiasi dominio, che è conveniente se si prova a livello locale.
L'ho usato con successo in combinazione con: RewriteCond% {HTTPS} = off RewriteRule^my-secure-url-segment https: //% {HTTP_HOST}% {REQUEST_URI} [R = 301, L] nel mio file .htaccess. – prograhammer
Non ha funzionato per me, $ _SERVER ['SERVER_PORT'] per me è 80; HTTP_X_FORWARDED_PORT è 443 – fedmich
ho messo seguenti righe nel file di ./application/config/config.php e funziona perfettamente:
$protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https' : 'http';
$config['base_url'] = $protocol.'://www.yoursite.com';
ho risolto il problema con in 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'];
La directory guai , è possibile utilizzare un semplice collegamento simbolico ln -s
Questo è ciò che ha funzionato per me. nostro server hanno entrambi $ _SERVER [ 'SERVER_PORT'] e $ _SERVER [ 'HTTP_X_FORWARDED_PORT']
Dovremmo verificare prima se $ _SERVER [ 'HTTP_X_FORWARDED_PORT'] è disponibile e utilizzare questo invece di $ _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']) ;
testato questo sul nostro server linux ...
btw, è basato sulla risposta di Skyler prima di quale era.
$config['base_url'] = ($_SERVER['SERVER_PORT'] == 443 ? 'https' : 'http') . "://{$_SERVER['HTTP_HOST']}/";
Le risposte precedenti non mantengono nome_script se l'elemento di configurazione è distribuito in una sottodirectory, è necessario preservarlo. str_replace (basename ($ _ SERVER ['SCRIPT_NAME']), "", $ _ SERVER ['SCRIPT_NAME']) – fedmich
posso facilmente, ho solo definire:
$config['base_url'] = '';
CI get base_url = automaticamente D
Non più consigliato, solo FYI. – twistedpixel
sì, CI3 nel config.php dice "NON DEVE essere usato in produzione!" – 2114L3
la soluzione che mi è venuta in mente è quello di utilizzare str_replace() in questo modo
$base_url_str = base_url();
$secure_base_url = str_replace("http","https",$base_url_str);
ogni volta che ho bisogno di una posizione sicura, io uso $ secure_base_url invece di base_url(), così diciamo che il vostro base_url() è http://www.example.com allora $ secure_base_url sarà https://www.example.com
un'altra question è simile a questo
è possibile utilizzare un relativo a protocollo url che manterrà la persistenza nel collegamento in CI.
nella vostra config.php
invece di:
$config['base_url'] = 'http://example.com/';
put;
$config['base_url'] = '//example.com/';
informazioni sui collegamenti relativi al protocollo here.
- 1. Come posso caricare .docx usando Codeigniter? (PHP)
- 2. PHP hide div su pagine specifiche?
- 3. Codeigniter e RestServer. Come caricare le immagini?
- 4. jQuery immagine Caricare - CodeIgniter
- 5. Come caricare un altro database usando CodeIgniter?
- 6. Qual è la procedura migliore per limitare le pagine specifiche agli utenti registrati solo in Codeigniter?
- 7. come posso caricare un file utilizzando PHP
- 8. Corretto il modo "Rails" per eseguire javascript su pagine specifiche
- 9. Come caricare più file in codeigniter 3.0.1
- 10. Come caricare l'helper dal modello in CodeIgniter?
- 11. htaccess reindirizza 4 pagine specifiche a https
- 12. Collegamento HTML a pagine specifiche in PDF
- 13. Rimuovere completamente ViewState per pagine specifiche
- 14. Come posso utilizzare certificati diversi su connessioni specifiche?
- 15. Come si visualizza l'opzione page_action per pagine specifiche?
- 16. creazione XML utilizzando CodeIgniter
- 17. Più grafici su più pagine utilizzando ggplot
- 18. Forza non SSL (http) su una pagina particolare e SSL su tutte le altre pagine da .htaccess
- 19. utilizzando doctrine con codeigniter
- 20. Posso creare tabelle specifiche di Hibernate Envers utilizzando Liquibase
- 21. CMS basato su CodeIgniter
- 22. CodeIgniter - impossibile caricare la classe richiesta
- 23. CodeIgniter: "Impossibile caricare la classe richiesta"
- 24. Come possiamo implementare SSL nelle pagine di Drupal?
- 25. Interrogazione dell'API di Google Analytics per le statistiche di pagine specifiche (filtro per pagine)
- 26. Come posso testare SSL su un computer per sviluppatori?
- 27. Come caricare le pagine con JavaScript anziché il reindirizzamento?
- 28. wordpress: come posso visualizzare più pagine su una pagina?
- 29. Come posso servire le pagine su myapp.meteor.com/login
- 30. Forza SSL per rotte specifiche in Rails 3.1
Grazie. Penso che andrò con la prima opzione e poi riscriverò l'url_help per gestire https. – ammonkc
La semplice risposta è impostare '' $ config ['base_url'] '' per svuotare la stringa, come in '' = ''; '' - CodeIgniter riconoscerà automaticamente tutto basandosi sull'URL.Di conseguenza, puoi aprire arbitrariamente qualsiasi pagina con o senza SSL, semplicemente digitando l'URL. Non c'è bisogno di dividere il contenuto tra le directory ssl e non_ssl sul tuo server. – f055
solo FYI, questo '$ config ['base_url'] =" http: // ". $ _SERVER ['http_host']. "/"; 'È sbagliato, dovrebbe essere' $ config ['base_url'] \t = 'https: //'. $ _SERVER ["HTTP_HOST"]. '/'; 'La sintassi è errata e $ _SERVER [" http_host "] (minuscolo) non esiste ... –