2012-11-09 5 views
3

하나의 웹 호스팅 계정에서 여러 도메인을 지원하는 솔루션을 찾고 있는데 htaccess를 사용해야합니다. 따라서 아이디어는 domainx를 호출하고 htaccess를 사용하여 서버가 웹 루트를 도메인 이름에 해당하는 하위 폴더로 "가짜"로 만듭니다. 나는 이미 "해결책"을 가지고 있지만 완벽하게 작동하지는 않습니다..htaccess 다중 도메인 다시 쓰기

문제는 내가 가지고 :

  1. PHP를 통해 (BASE_URL와() CodeIginiter의) 결과 리디렉션; 예 : "http://www.domein1.nl/domein1.nl/"
  2. 내 로컬 서버에서 작동하지 않습니다.

그래서, htaccess로 내가 현재 사용하고 있습니다

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteCond %{HTTP_HOST} domein1.nl$ [NC] 
RewriteCond %{REQUEST_URI} !^/domein1.nl/.*$ 
RewriteRule ^(.*)$ /domein1.nl/$1 [L] 

RewriteCond %{HTTP_HOST} domein2.nl$ [NC] 
RewriteCond %{REQUEST_URI} !^/domein2.nl/.*$ 
RewriteRule ^(.*)$ /domein2.nl/$1 [L] 

</IfModule> 

된답니다 PHP 코드를 BASE_URL 위해(). 서버 변수 "SCRIPT_NAME"이 (가) 문제 1로 표시된 두 번째 도메인 폴더를 추가합니다. 루트 폴더가 올바르게 위조 된 경우 이러한 일이 발생하지 않아야합니다. 하지만 실제로 가능한가?

192.168.2.9 local.domein1.nl 
192.168.2.9 local.domein2.nl 

SOOO가 .. 어떻게 이러한 문제를 해결합니까 : 내 호스트 파일을 통해 내가 리디렉션 않는 동안

if (isset($_SERVER['HTTP_HOST'])) 
{ 
$base_url = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off' ? 'https' : 'http'; 
$base_url .= '://'. $_SERVER['HTTP_HOST']; 
$base_url .= str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']); 
} 

그리고 마지막으로를, 내 로컬 서버에서 작업 is'nt? 미리 감사드립니다!

편집 : 내 로컬 서버와의 문제가 해결 ... 기침 "는 sudo a2enmod 재 작성"한 트릭 ..

Edit2가 : stormdrain은 폴더 구조에 대해 시작부터 여기 광산이 다수를 명확히하는 것입니다 CI 애플리케이션.

메인 htaccess로 위치/웹 루트

/public_html/.htaccess 

domain1의 :

/application/domain1/ (domain1 application path) 
/application/system/ (shared system path) 
/public_html/domain1/index.php (CI domain1 index) 

도메인 2 :

/application/domain2/ (domain2 application path) 
/application/system/ (shared system path) 
/public_html/domain2/index.php (CI domain2 index) 

+0

왜 아파치에 2 개의 가상 호스트를 설정하지 않습니까? –

+0

Lol hoi Etiënne! –

답변

1

글쎄, htaccess로를 깔끔하게 할 수 없다 보인다 .. O가 아니라, 나는 그것을 "고정"

. CodeIgniter index.php 내 수정 내용 : 변수 $ application_folder의 선언을 아래 코드로 바꿨습니다.

define('DOMAIN', preg_replace(
    "/^(www.|local.)?([^.]+).[^.]+$/i", "\\2", 
    $_SERVER['HTTP_HOST'] 
)); 

if (DOMAIN == 'domain2') 
    $application_folder = '../application/domain2'; 
else 
    $application_folder = '../application/domain1'; 

"url_helper"시스템을 약간 변경했습니다. 나는 이미지/CSS/JS 등을 저장 경로로 URI를 반환이 "static_url()"기능을 추가

if (! function_exists('static_url')) 
{ 
    function static_url() 
    { 
     return base_url().'static/'.DOMAIN.'/'; 
    } 
} 

내가 알아낼있어 사소한 일이 로봇 같은 일을 분할하는 방법이다. txt

2

당신이하려는 일이 완전히 명확하지 않습니다. 마치 가상 서버를 설정할 수없는 동일한 서버를 가리키는 도메인 이름이 여러 개있는 것처럼 들리므로 VirtualHosts를 설정할 수 없습니다. 또한 단일 애플리케이션으로 도메인을 제공하고 하위 폴더를 URL의 일부로 사용하지 않으려합니다 (예 : http://www.domain1.nl/domain1.nl을 URL의 홈 페이지로 사용하지 않으려는 경우).

그렇다면,이 작업을 수 있습니다

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/

    RewriteCond %{HTTP_HOST} domein1.nl$ [NC] 
    RewriteRule ^(.*)$ /domein1/$1 [L] 

    RewriteCond %{HTTP_HOST} domein2.nl$ [NC] 
    RewriteRule ^(.*)$ /domein2/$1 [L] 

</IfModule> 

는 다음 경로에 CodeIgniter의에서 요청 경로를 만들 :

$route["/domein2/(:any)"] = "/domein2/$1"; 

가 재 작성 로컬 작업을 진행하기를, 당신은에 도메인을 추가해야합니다 .htaccess 파일 :

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/

    RewriteCond %{HTTP_HOST} local.domein1.nl$ [NC] 
    RewriteRule ^(.*)$ /domein1/$1 [L] 

    RewriteCond %{HTTP_HOST} local.domein2.nl$ [NC] 
    RewriteRule ^(.*)$ /domein2/$1 [L] 

</IfModule> 

그런 다음 BASE_URL가 SCRIPT_NAME을 필요가 없습니다 그것은 다시 작성하고 URL에서 전달되고 이후 :

if (isset($_SERVER['HTTP_HOST'])) 
{ 
    $base_url = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off' ? 'https' : 'http'; 
    $base_url .= '://'. $_SERVER['HTTP_HOST']. '/'; 
} 

업데이트.

당신과 같은 각 도메인에 대해 CI 폴더가있는 경우 :

/var/www/domain1/index.php
/var/www/domain1/application/
/var/www/domain1/system/

/var/www/domain2/index.php
/var/www/domain2/application/
/var/www/domain2/system/
등을

RewriteCond %{HTTP_HOST} domain1.nl$ [NC] 
RewriteRule ^(.*)$ /domain1/$1 [L] 

RewriteCond %{HTTP_HOST} domain2.nl$ [NC] 
RewriteRule ^(.*)$ /domain2/$1 [L] 

당신을 위해 일해야합니다.

+0

예, 여러 도메인 및 vhosts 옵션 없음. 도메인은 여러 (!) CI 응용 프로그램에서 제공되지만 동일한 CI 시스템에서 제공됩니다. 따라서 경로는 직접적인 옵션으로 보이지 않습니다. 그리고 저에게, CI 시스템 url_helper를 변경하는 것은 좋은 영구 수정처럼 보이지 않습니다. 어쨌든 당신이 제안하는 htaccess는 직접 폴더 요청에서 도메인에 매핑되지 않고 더 많은 논리로 보입니다. (각 도메인의 두 번째 줄은 남겨 둡니다.) 하지만 ... 그것은 내부 오류를 제공합니다 .. :(얼마나 많은/오래이 나를 도청 믿을 수 없어 .. – EvdTempel

+1

그래서 만약 당신이 각 도메인에 대한 CI 폴더를 가지고, 다시 쓰기가 작동해야합니다 (그것은 나를 위해 일하고있어) 그리고 당신은 라우팅을 무시할 수 있습니다. 내가 대답을 업데이 트했습니다 ... – stormdrain

+0

그건 처음 상황으로 좀 돌아 왔습니다. + 당신이 다른 도메인에 액세스 할 수 있다는 것을 발견했습니다. 로컬로 시도 했으므로 (여전히 실행하고 있기를 바랍니다) http :/domain1/domain2 /. 추신 : 내 폴더 구조가 약간 다르다. 분명히하기 위해 기본 게시물을 초 단위로 업데이트 할 것이다! – EvdTempel