묻고답하기
접속도메인에 따라 다른 xe 레이아웃 불러오려면?
2016.01.12 19:09
유사 질문을 올렸다가 해결이 안되어 약간 수정한 질문을 다시 올립니다.
하나의 호스팅서버에 하나의 xe를 설치, 운영하고 있습니다.
sub1.sample.com, sub2.sample.com .... 으로 관련 웹페이지를 다수 두려고 합니다.
하나의 xe 안에 다수의 레이아웃을 만들어 쓸수 있기 때문에 접속하는 도메인을 파악하여 - if ($_SERVER['HTTP_HOST'] == 'sub1.sample.com') - 해당 레이아웃을 불러오게 하면 가능해 보이는데 어떻게 할 수 있을까요?
관련 웹페이지들이 동일한 로그인 정보로 로그인 되도록 하고 싶습니다.
고수분들의 조언 부탁합니다.
댓글 14
-
배워서남준다
2016.01.13 08:33
-
greenCode
2016.01.13 13:46
말씀하신 멀티도메인 모듈을 이용해 원하는 동작을얻었습니다. 감사합니다. 모듈 제작해주신 라르게덴님께도 감사드립니다.
레이아웃에 대해 잘못 알고 있던 것이 있었습니다. 레이아웃을 먼저 불러오면 레이아웃에 연결된 페이지들을 불러오는 줄 알았는데 거꾸로가 맞군요. 해당 페이지 또는 모듈을 불러오면 그 페이지에 적용된 레이아웃을 불러오는군요. 그래서 위 질문 내용처럼 레이아웃 호출에 계속 집착해왔습니다. 혹 저처럼 오해하시는 분 있을까하여 적었습니다.
-
greenCode
2016.01.13 13:50
그리고 적어주신 코드를 보며, 잘 모르지만 하나 더 문의합니다. 기본폴더 www 아래에 xe가 기본설치되어 있는데, www/sub1을 만들고 그 아래에도 xe를 추가로 설치할 수 있나요? 기본 xe와는 DB 등이 별개로 운영되도록 말이죠.
-
배워서남준다
2016.01.13 23:27
www 폴더, 즉 루트에 xe가 설치되어 있는경우 서브폴더 생성한후, XE폴더와 파일 전부를 하위폴더로 이동한후, 관리페이지에서 기본url 을 재설정하면 됩니다. 또는 ./files/config/db.config.php 에서 default_url 경로로 재설정해도 되고요.
서브 폴더를 여러개 만들어서 필요에따라 각각 폴더에 XE를 여러개 설치할수도 있습니다.
호스팅업체에 따라서 DB를 하나만 사용할 수 있는경우, DB 정보입력 페이지에서 '테이블 접두사' 를 다르게 입력하면 하나의 DB에 XE를 여러개 운영할 수 있습니다.
-
greenCode
2016.01.14 14:23
조금더 질문을 해야겠는데요. DB를별도로 쓰는 sub1.sample.com 홈페이지를 위해 www/sub1 폴더에 xe 파일 모두를 옮겼습니다. DB 내 xe-sub1_ 을 접두사로 하는 테이블 수십 가지는 어떻게 생성해야 하나요?
생성작업 없이 ./files/config/db.config.php 의 설정만 'db_table_prefix' => 'xe-seoul_', 로 하고 캐시파일 재생성하니 접속불가 되어 버렸습니다. 뒤늦게 알게된 당연한 결과겠지만요.
그리고, default_url 경로 설정은 무슨 의미인가요? 현재, 멀티 도메인 모듈 설치로 default_url 경로를 무지정 해놓은 상태입니다.
-
배워서남준다
2016.01.15 00:50
처음 질문한 내용과 댓글에 추가 질문한 내용이 계속 엉뚱한 방향으로 진행되는것 같고 그러다보니 배가 산으로 가는 듯한 느낌이어서 약간은 교통 정리가 필요한것 같네요.
예를 들어서....
1. 여러 도메인을 하나의 XE에 모듈로 연결되도록 하려면...
sub1.sample.com 은 sub1 모듈로 연결되고,
sub2.sample.com 은 sub2 모듈로 연결되고,
sub3.sample.com 은 sub3 모듈로 연결되도록 하려면, 아래 구문을 루트에 index.php 파일에 작성하면 됩니다.이렇게 하면 XE가 하나이고 DB도 하나라서 회원과 컨텐츠를 통합 관리할 수 있습니다.
<?php
$referer = (isset($_SERVER['HTTP_REFERER'])) ? $_SERVER['HTTP_REFERER'] : $_SERVER['HTTP_HOST'];
if(preg_match('/(sub1.sample.com)/i', $referer))
{
header( 'Location: http://도메인/xe/index.php?mid=sub1' );
exit();
}
else if(preg_match('/(sub2.sample.com)/i', $referer))
{
header( 'Location: http://도메인/xe/index.php?mid=sub2' );
exit();
}
else
{
header( 'Location: http://도메인/xe/index.php?mid=sub3' );
exit();
}
?>그리고... 만약
2. 각각의 도메인에 XE를 따로 설치하여 회원이나 컨텐츠를 개별적으로 관리 운영하려면...
sub1.sample.com 은 sub1 폴더에 설치하고,
sub2.sample.com 은 sub2 폴더에 설치하고,
sub3.sample.com 은 sub3 폴더에 설치한후, 아래 구문을 루트에 index.php 파일에 작성하면 됩니다.이경우 각각의 sub1, sub2, sub3 폴더에 XE 설치시 DB정보는 똑같이 입력하고, 접두사만 sub1, sub2, sub3 이런식으로 등록하면 됩니다.
<?php
$referer = (isset($_SERVER['HTTP_REFERER'])) ? $_SERVER['HTTP_REFERER'] : $_SERVER['HTTP_HOST'];
if(preg_match('/(sub1.sample.com)/i', $referer))
{
header( 'Location: http://도메인/sub1/' );
exit();
}
else if(preg_match('/(sub2.sample.com)/i', $referer))
{
header( 'Location: http://도메인/sub2/' );
exit();
}
else
{
header( 'Location: http://도메인/sub3/' );
exit();
}
?>그리고 첫번째, 두번째 모두 default_url 경로를 재설정할 필요는 없습니다.
-
greenCode
2016.01.15 14:01
정리를 해 주셔서 이해됐습니다. DB 정보를 별도로 사용하려면 xe를 새로 설치해야 하는군요.
위 코드 중 '도메인'은 위 예에서는 sample.com 을 가리키는 것으로 이해됩니다. sub1.sample.com 으로 접속하면 sub1 모듈 또는 sub1 폴더로 연결될텐데 브라우저의 주소가 sample.com/xe... 또는 sample.com/sub1... 등으로 풀리지는 않을까요?
질문이 멈추지 않네요. 답글에 감사드립니다.
-
배워서남준다
2016.01.16 14:14
아마도 php 구문 이해가 잘 안되신것 같네요.
브라우저 주소창에 주소가 sub1.sample.com 으로 접속되면 sample.com/sub1 으로 재접속 됩니다.
모듈도 마찬가지고요. sub2.sample.com 으로 접속되면 sample.com/index.php?mid=sub2 모듈페이지로 재접속 됩니다.
무엇을 어떻게 하고 싶으신건지 질문 이해가 잘 안되네요.
방법에 대한 답변을 다 해드린것 같은데...
study4you.kr 으로 오셔서 쪽지로 FTP 접속정보 보내주시면 수정해 드리지요... -
greenCode
2016.01.17 21:24
제가 원하는 동작은 sub1.sample.com 으로 접속하면 브라우저의 주소란에 sub1.sample.com 도메인을 계속 유지한 채 서브폴더의 페이지 또는 해당 모듈의 페이지를 보여주는 것입니다.
알려주신 방법은 브라우저 주소란에 보이는 도메인이 재접속되는 sample.com/....으로 바뀌지 않느냐는 추가 질문이었습니다.
많은 것 알려주어서 감사합니다.
-
배워서남준다
2016.01.18 07:36
이미 알려드린 방법중에서 선택하시면 됩니다.
sub1.sample.com 도메인으로 접속하면, 루트 index.php 에서 접속된 도메인 주소를 체크해서 sub1.sample.com 인 경우 sub1.sample.com/XE폴더/ 로 접속되게 하거나, sub1.sample.com/XE폴더/index.php?mid=모듈명 으로 접속되도록 하는 것입니다.
두가지 모두 루트에 XE를 설치하면 안되고 하위폴더에 XE 설치를 해야합니다.
예를 들어서....
sub1.sample.com 으로 접속시 sub1.sample.com/xe1/ 으로 접속되고
sub2.sample.com 으로 접속시 sub1,sample.com/xe2/ 으로 접속됩니다. 즉 각각 서로 다른 XE 폴더로 접속됩니다.
만약 하나의 XE를 사용하고자 한다면
sub1.sample.com 으로 접속시 sub1.sample.com/xe/index.php?mid=sub1 모듈로 접속
sub2.sample.com 으로 접속시 sub1.sample.com/xe/index.php?mid=sub2 모듈로 접속됩니다.
각각의 방법은 모두 XE가 루트가 아닌 서브폴더에 설치된 경우로, 루트에 index.php 를 통해 접속주소를 분석해 원하는 경로로 이동되게 되도록 한것입니다.
만약 XE를 루트에 설치한 경우, 위에서 소개해드린 애드온 사용하시고, 도메인 주소는 www.sample.com 을 사용해야 하겠지요.
만약 이 방법도 아닌, 주소창에 접속 도메인이 바뀌지 않고 그대로 출력되게 하려면 프레임을 나누면 됩니다.
프레임을 이용한 방법은 예전에 많이 사용되던 방법으로 구글 검색하면 쉽게 찾을 수 있습니다.
-
greenCode
2016.01.18 15:35
네 말씀해주신 것 모두 이해했고 큰 도움 되었습니다. 장시간 세밀하게 알려주신 것에 큰 감사드립니다.
-
배워서남준다
2016.01.13 23:31
www 폴더, 즉 루트에 xe가 설치되어 있는경우 서브폴더 생성한후, XE폴더와 파일 전부를 하위폴더로 이동한후, 관리페이지에서 기본url 을 재설정하면 됩니다. 또는 ./files/config/db.config.php 에서 default_url 경로를 재설정해도 되고요.
서브 폴더를 여러개 만들어서 필요에따라 각각 폴더에 XE를 여러개 설치할수도 있습니다.
호스팅업체에 따라서 DB를 하나만 사용할 수 있는경우, DB 정보입력 페이지에서 '테이블 접두사' 를 다르게 입력하면 하나의 DB에 XE를 여러개 운영할 수 있습니다.
-
돼지코구뇽
2016.01.13 13:04
<? if($_SERVER["HTTP_HOST"]=="도메인1" || $_SERVER["HTTP_HOST"]=="도메인1") { ?>
<?php include_once('index1.php'); ?>
<? } else if($_SERVER["HTTP_HOST"]=="도메인2" || $_SERVER["HTTP_HOST"]=="도메인2") { ?>
<?php include_once('index1.php'); ?>
<? } ?>
게하고각각 index1.php과 index1.php에 head.php와 tail.php를 다르게 설정하여 하나의 호스팅에 2개의 도메인을 사용할수있습니다. -
greenCode
2016.01.13 13:55
감사합니다. 코드를 이해하고 싶은데요... 우선 위 코드를 index.php 에 넣으라는 말씀인 것같고, || 연산자 좌우가 같은데 맞는 것인지요?
라르게덴님의 자료 이용하시면 될듯 싶네요.
모듈마다 다른 레이아웃 사용하면 됩니다.
https://www.xpressengine.com/index.php?mid=download&package_id=21876999
그리고 제가 사용하는 방법중에 하나로...
<?php
$referer = (isset($_SERVER['HTTP_REFERER'])) ? $_SERVER['HTTP_REFERER'] : $_SERVER['HTTP_HOST'];
if(preg_match('/(도메인)/i', $referer))
{
header( 'Location: http://도메인/경로/' );
exit();
}
else if(preg_match('/(서브도메인|서브도메인)/i', $referer))
{
header( 'Location: https://도메인/경로/' );
exit();
}
else
{
//header( 'Location: http://도메인/' );
//exit();
}
?>