2012-11-02 3 views
8

문서 머리글의 CSS 링크 경로에서 {site_url} 태그를 사용하는 EE 사이트를 방문하면 사이트에서 CSS 파일을로드 할 수 없다는 사실을 발견했습니다 http가 아닌 https를 입력하면됩니다.HTTPS 및 HTTP ExpressionEngine 사이트 URL 태그

나는 HTTP에 강제로 htaccess 파일을 사용하여이 라운드를 가지고 있지만, 둘 다 작동하도록 변경할 수있는 EE 내 설정이 있는지 궁금해 한단 말이니?

이것은 Chrome과 IE에서만 발생했습니다. 브라우저가 보안을 유지하도록 설정되어 있는지에 따라 다릅니다.

답변

5

CSS와 JS를로드 할 때 나는 결코 도메인을 사용하지 않습니다. 예 :

<link rel="stylesheet" href="/layout/styles/layout.css" > 

이렇게하면 작동합니까?

+0

Gareth는 {stylesheet =}를 사용하여 이점을 얻었을 수도 있습니다.이 경우 그가 언급하는 동작이 표시됩니다. –

+0

Hi Sean 네, 괜찮 았는데, 결국 제가 한 일입니다. 위의 Deviarte 대답은 흥미로운 해결책처럼 보입니까? – Gareth

7

이 문제에 대한 큰 도움이되었습니다. previously. 나도 네게 도움이되기를 바란다.

+1

안녕 스콧을 갈 수 있어야한다 - 당신은 몇 EE 질문에 도움이났습니다. http://area51.stackexchange.com/proposals/46387/expressionengine?referrer=AwnV9oYF5EKlETXKp3ZQQw2 (우리는 200 개 이상의 담당자와 사람이 필요)이 스콧에 대한 –

+0

감사합니다 : 당신이 여기에 우리의 EE 스택 교환 제안을 지원할 수 있다면 좋지 않을까. – Gareth

3

system/expressionengine/config/config.php 파일에서 PHP를 사용하여 {site_url} 구성 (프로토콜 포함)을 동적으로 설정할 수 있습니다. 이런 식으로 뭔가 : 당신은 config.php에 그 기초에서 테마 경로, 다양한 이미지 경로, 업로드 경로 등을 모두 구축 할 수

// Detect protocol and server host 
$protocol = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") ? "https://" : "http://"; 
$base_url = $protocol . $_SERVER['HTTP_HOST']; 

// Set EE index page 
$config['index_page'] = ""; 

// Set base and site URL 
$config['base_url'] = $base_url . "/" . $config['index_page']; 
$config['site_url'] = $config['base_url']; 

. 그러나 $config['site_url']{path=""}{stylesheet} 태그의 출력에 영향을주는 요소입니다.

자세한 내용은 NSM's Config Bootstrap file 또는 Configuring ExpressionEngine for multiple servers 문서를 참조하십시오. 모든 경로를 들어 당신은 config.php 설정 EE2 Config Overrides

6

소수의 사람들은 당신이 프로토콜 상대 URL의 자산

에 사용할 수 있습니다 알아 볼 수

예 :

<link rel="stylesheet" href="//www.site.com/site.css"> 
<script type="text/javascript" src="//www.site.com/site.js"></script> 

브라우저가 페이지를 볼 경우 HTTPS를 통해 SSL을 보내면 https 프로토콜로 자산을 요청합니다. 그렇지 않으면 HTTP로 요청합니다.

이렇게하면 IE에 모든 "자산이 포함 된 페이지가 안전하고 보안되지 않은 항목"이라는 오류 메시지가 표시되지 않으므로 동일한 프로토콜 내에서 모든 자산 요청을 유지할 수 있습니다. here에서

더 많은 정보 : 계획없이

상대 URL (HTTP : 4.2 절 : 또는 https :)은 RTF 3986 당 유효합니다. 클라이언트가 을 울리는 경우 RFC에 지정된 URI 구문을 따르지 않아 클라이언트의 잘못입니다.

귀하의 예가 유효하며 작동해야합니다. 트래픽이 많은 사이트에서 해당 URL을 자신으로 사용했으며 에 불만이 없었습니다. 또한 은 Firefox, Safari, IE6, IE7 및 Opera에서 사이트를 테스트합니다.이 브라우저는 모두 URL 형식을 이해합니다.

+0

이것은 훌륭하고 우아한 해결책입니다! 하지만주의 : EE는 분명히 'site_url'을 이렇게 설정하는 것을 좋아하지 않습니다. FWIW. –

+0

Deviarte에 감사드립니다. 템플릿의 전역 변수를 사용하려면 표준 {site_url}이 http를 출력하기 때문에 //www.site.com을 사용하는 템플릿을 만들어야합니다. – Gareth

0

나는 Nginx를 사용합니다.

나도 몰라 왜 대신 상대 (/의 자원로드 속도가 매우 빠르고 다양한 브라우저에서 나는 절대 URL (전체 경로)를 사용하는 경우는 프로토콜에 문자열을 시작하는 도메인 as CreateSean said, //에서 문자열을 시작합니다 as Deviarte said) (또는 상대 URL로로드하는 속도가 느린 것은 아닌지, 잘 모르겠습니다.) Ergo, 요즘의 환경에서는 솔루션/관행 (내가 해왔 던 작업과 두 가지 작업 모두)이 바람직하지 않습니다. 내가 한 대신 무엇을

는하여 config.php를에 다음과 같다 :

$config['base_url'] = $_SERVER["scheme_url"]; 
$config['site_url'] = $_SERVER["scheme_url"]; 

는 아직 존재하지 않는 경우 scheme_url와 PHP를 제공해야 할 수도 있습니다.

fastcgi_param scheme_url "$scheme://$host/"; 

편집 :

부트 스트랩에서 둘러보고/configs를 일부 사용 나처럼 당신이 PHP-FPM를 사용하는 경우 귀하의 nginx 사이트 구성 (들)에 필요한 곳 ​​/로 단지 구성이 추가 구성 변수에 프로토콜을 추가하는 방법 (예 : comment by unexplainedBacn above). 제가 아파치와 Config.php에 파일을 사용하는 방법

다음

이며,

fastcgi_param HTTPS on; 
1

모든 : 기본적으로 Nginx의에서 어떤 HTTPS 서버 변수가 SSL에서 PHP에 대한 가상 호스트 설정에서,이없는 다음과 같은 추가 브라우저에서 '비 SSL 콘텐츠 경고'를 실행하지 않도록 URL을 다시 작성하십시오.

# Set an Apache 'site_url' variable to http when accessed via http: 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ - [E=site_url:http://mysite.com] 


# Set Apache 'site_url' variable to https when accessed via https 
RewriteCond %{SERVER_PORT} 443 
RewriteRule ^(.*)$ - [E=site_url:https://mysite.com] 

그 다음에 : 그들은 아파치의 htaccess로 파일에서 :

을 통과 할 너무 좋은이기 때문에 나는 여전히 {경로} 내 템플릿 {스타일} 변수를 사용하고 있습니다 시스템/expressionengine/config.php를

코드 (당신이 설정 파일에 다른 곳에서 이러한 변수를 설정하지 않은 확인)

에 다음 두 줄을 추가3210

내가 이해하는 것처럼 site_url 변수는 EE에서 {stylesheets} 및 {paths}에 대해 EE가 사용하는 변수입니다.

속담 '마지막 한가지' 여전히 비 SSL 경고를 받고있는 경우

, 그냥 소스를 확인하고 검색 '에 http : //'소스에서. 이들은 범인이다. 그것들은 base_url/site_url 변수로 설정되지 않은 하드 코딩 된 링크입니다.

posts/templates/variables/snippets에서 http 호출을 찾아 간단한 호출로 바꿔야합니다.
그래서

http://example.com/some_file.html 

의 호출은 다음과 같아야한다 : 이것은 절대 및 상대 URL에 대한 작동

//example.com/some_file.html. 

합니다.

이것은 EE 파일 업로드 디렉토리로 설정 한 경로에도 해당됩니다. 확인이

//example.com/path/to/your/upload/directory 

그리고 짜잔처럼 보이도록 해당 디렉토리의 URL을 변경하게, 당신이 :)