0

두 개의 개별 사이트를 가리키는 시작 페이지가있는 프로젝트가 있습니다. 사이트는 동일한 서버에서 호스팅되며 더 나은 유지 관리를 위해 별도의 폴더에 있어야합니다.하나의 도메인에서 3 개의 웹 사이트를 mod_rewrite로만 폴더에 매핑하는 방법은 무엇입니까?

폴더 구조가 같은 것을해야한다 :

/home/user1234/public_html 

    /splash/ 
     index.html 
     css/ 
     images/ 
     ... 

    /site1/ 
     index.php 
     css/ 
     images/ 
     ... 

    /site2/ 
     index.php 
     css/ 
     images/ 
     ... 

주요 사이트 (사이트 1과 사이트 2는 아마 두 개의 워드 프레스 설치) URL 구조, NOT 하위 도메인과 같은 하위 디렉토리에 액세스 할 수 있습니다 ! 따라서 URL 구조는 다음과 같아야합니다.

이제이 URL을 서버의 해당 디렉토리에 일치시켜야합니다. 하지만 정확히 어떻게 해야할지 모르겠습니다. 공유 호스팅 서버라고해야만합니다. 따라서 htaccess와 mod_rewrite를 사용하여이 작업을 수행 할 수 있습니다.

웹 호스트의 관리 인터페이스에서 www.MySite.tld를/splash 폴더로 지정했습니다. 그런 다음 그 폴더에 htaccess로 넣어 같은/사이트 개발 및/사이트 2, 뭔가 "가상 폴더"에 요청을 다시 :

RewriteEngine on 

RewriteCond %{REQUEST_URI} ^/(site1|site2)/?$ [NC] 

RewriteRule ^(.*)$ /home/user1234/public_html/%1 [L] 

이 작동하지 않는 내가 아는 한, 일 할 수 있기 때문에 mod_rewrite로만 현재 DOCUMENT_ROOT (/ splash) 외부의 파일에 다시 쓰지 않습니다. 그래서 나는 www.MySite.tld를/splash 대신/public_html까지 한 레벨 위로 향하게했습니다. 이제/site1 및/site2에 대한 요청은 확실히 작동하지만 위의 폴더 구조에서 볼 수있는 것처럼 인덱스 파일이 없으므로 기본적으로 404에 대한 요청/반환을 기본값으로 반환합니다.

RewriteEngine on 

RewriteCond %{REQUEST_URI} ^/?$ [NC] 

RewriteRule ^(.*)$ /splash [L] 

이제 시작 페이지 accessable 한 것입니다하지만 내가하지 무슨 URL의 끝에 "/ 시작"을 추가 : 그래서 나는 또한 다음과 같은 규칙을/public_html을에 htaccess로 한 단계 올려 필요!

나는 여러 시간 동안 해결책을 찾고 있었고 지금까지 발견 한 많은 제안을 시도했지만 이들 중 어느 것도 내 문제를 해결하지 못했습니다. 마지막으로 시도한 것은 virtual host with mod_rewrite을 설정하는 것이지만 너무 일하게 만들지 못했습니다. 아마도 mod_rewrite와이 모든 다른 아파치에 대해서 아직 충분히 확신하지 못했습니다. ;-)

아니면 올바른 RewriteBase를 설정하는 것과 같은 기본적인 기능이 누락되었습니다.이 url + 폴더 구조는 mod_rewrite로만 수행 할 수 있습니까? 그렇다면 어떤 재 작성 규칙을 설정해야합니까? 그렇지 않다면 사용할 수있는 대안이 있습니까? 어떤 도움이라도 대단히 감사하겠습니다.

+0

이걸 http://webmasters.stackexchange.com으로 옮길 가치가 있습니다. – ninesided

답변

1

mod_rewrite를 사용하여 쉽게 수행 할 수 있습니다.

RewriteEngine On 
RewriteCond %{REQUEST_URI} !^/(site1|site2|splash)/ [NC] 
RewriteRule ^(.*) splash/$1 [L,PT] 

RewriteCond이는 htaccess로 구현 특히 중요하다 (사이트 1이나 사이트 2가 요청 될 때 재 작성을 방지하고, 또한 /splash 요청에 무한 루프를 방지합니다 : 당신이 나와있는 URL 구조를 감안할 때, 다음의 .htaccess를 사용). RewriteCond 경우

RewriteRule는 모든 URL ^(.*) 대해 일치하고 splash/$1로 재기록된다 (즉, 요청이 세 개의 경로 중 어떤 아님) 일치한다. L,PT 옵션은 L|last 규칙 (VirtualHost 컨텍스트에서 유용하며 .htaccess에서 항상 작동하지는 않음)과 리디렉션 (30x)을 보내지 않고 요청을 PT|passthrough 백엔드 (이 경우 Apache)) 헤더를 클라이언트 브라우저에 추가하십시오.

+0

당신의 대답은 매우 유용합니다. 특히 'PT | 통과'가있는 것 - 그 깃발에 대해 몰랐습니다. 이제는 작동하고 결국에는 꽤 쉬웠습니다 ... 정말 고마워요! – Frisko