2016-03-08 32 views
7

Używam CodeIgniter 3 jako platformy internetowej i próbuję zaimportować CSS semantic-UI do mojej strony. Robię to, używając metody CodeIgniter's base_url() we właściwości href do importowania CSS.Kodek echa [:: 1] zamiast localhost

Jednak sama plik semantic.css importuje inne czcionki obecne na moim serwerze, które następnie nie mogą zostać załadowane z powodu zasady współdzielenia zasobów Cross-Origin. To chrom komunikat daje mi:

czcionki z pochodzenia „http://[::1]” został zablokowany z załadunkiem od polityki Cross-Origin Resource Sharing: Nie „Access-Control-Allow-Origin” header jest obecny na żądanego zasobu. Pochodzenie "http://localhost" jest zatem niedozwolone.

Dzieje się tak, ponieważ base_url() powoduje, że domena jest [::1], a nie localhost, tak jak wpisałem w przeglądarce.

Z jakiegoś powodu wydaje mi się, że chrome (a także Edge) nie uważa [::1] i localhost jako tego samego hosta, a może po prostu jestem głupi. Wiem tylko, że jeśli zmienię ścieżkę głównego pliku semantic.css i twardego kodu lokalnego localhost, to działa i działa również wtedy, gdy zamiast żądać mojej strony przy użyciu localhost, używam [::1]

I Zrobiliśmy inne projekty bardzo podobne do tego i nigdy nie mieliśmy tego "[::1]". Co dokładnie powoduje, że php wywołuje taką ścieżkę?

Odpowiedz

21

To z powodu twojego base_url jest pusty.

W konfiguracji/config.php

$config['base_url'] = 'http://localhost/project_name'; 
+0

Cóż, zdaję sobie z tego sprawę, ale nigdy go nie wypełniałem, a base_url zawsze było poprawnie rozwiązywane, czy było to na serwerze localhost, czy w innej domenie. Jeśli wypełniłem tę wartość, wyobrażam sobie, że będę musiał to zmienić, przenosząc mój projekt z mojego komputera na inny serwer, prawda? – Dalannar

+0

Jakiś inny serwer oznacza? –

+0

Gdybym przestawił się mówić example.com, czy base_url nadal echo localhost miałbym ustawić? – Dalannar

3

Aby wykorzystać base_url(); musisz najpierw załadować Pomocnik URL. Można to zrobić albo w application/config/autoload.php (w okolicach linii 67) lub ręcznie przy użyciu

$this->load->helper('url'); 

niż ustawić

$config['base_url'] = 'http://localhost/your_site_url'; 

Myślę, że to pomoże Ci

3

bardziej dokładny i dynamiczny sposób

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

Choć nadal można korzystać z portu.

1

To, co trzeba zmienić w config/config.php, to działa poprawnie w "localhost", a także w "serwer":

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

$config['base_url'] .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']); 

if(!defined('DOCUMENT_ROOT')) define('DOCUMENT_ROOT',str_replace('application/config','',substr(__FILE__, 0, strrpos(__FILE__, '/')))); 

$config['base_path'] = constant("DOCUMENT_ROOT"); 

$config['js_url'] = $config['base_url'].'js/'; 

$config['css_url'] = $config['base_url'].'css/'; 

$config['image_url'] = $config['base_url'].'img/'; 

// Host resolution for cross origin requests 

if(ENVIRONMENT == 'production') { 
    $config['host'] = 'www.<domain_name>.com'; 
} else { 

$config['host'] = 'localhost'; 

} 
3

Trzeba edytuj swoje $ config [ 'base_url'] następująco,

$config['base_url'] = ''; 
$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']); 

lokalizacja pliku: CodeIgniter/application/config/config.php
Wykorzystanie powyżej kodu, aby uzyskać dynamiczny adres URL.