2013-05-10 2 views
3

브라우저의 주소 표시 줄에 이전 도메인이 표시되도록 유지하면서 이전 도메인을 새 하위 도메인으로 리디렉션하려고합니다.브라우저의 주소 표시 줄에 이전 도메인 이름이 표시되도록 유지하면서 이전 도메인 이름을 새 도메인 이름으로 리디렉션하는 방법은 무엇입니까?

나는 그것을하기 위해 htaccess를 사용했으며 주소 표시 줄에 이전 도메인을 표시하는 것을 제외하고는 모든 것이 작동합니다.

또 다른 중요한 점은 URL 및 GET 변수의 폴더를 유지 관리해야한다는 것입니다.

이 작업을 수행하기 위해 i- 프레임을 사용하고 싶지 않기 때문에 htaccess를 통해이 모든 작업을 우아하게 처리하려고합니다.

다음은 지금까지 사용해온 코드입니다. 브라우저의 주소 표시 줄에 이전 도메인 이름을 유지하는 것을 제외하고는 작동합니다.

제 질문은 리디렉션 후에 브라우저의 주소 표시 줄에 이전 도메인 이름을 어떻게 표시합니까? 나는 이것이 어딘가에서 '프록시 내용'이라고 불리는 것에 의해 수행 될 수 있다고 읽었지 만 틀릴 수도 있습니다. 나도 그게 어떻게 작동하는지 알지 못한다.

<IfModule mod_rewrite.c> 

RewriteEngine On 

RewriteBase/

RewriteCond %{HTTP_HOST} ^domain.com [nc] 
RewriteRule ^(.*)$ http://subdomain.domain.com/$1 [r=301,nc,L] 

RewriteCond %{HTTP_HOST} ^www.domain.com [nc] 
RewriteRule ^(.*)$ http://subdomain.domain.com/$1 [r=301,nc,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

</IfModule> 

업데이트 : 나는 한 단계 더 가지고 있도록

좋아요. 다음 코드는 웹 사이트 파일을 루트의 하위 디렉토리에 넣을 때 작동합니다.

그러나 여전히 문제가 있습니다. example.com을 example.com/subdirectory로 리디렉션하지만 example.com/index.php는 example.com/subdirectory/index.php로 리디렉션하지 않습니다.

나는 index.php를 포함하여 모든 파일에서 작동 할 수 있도록하는 방법을 알아 내려고하고 있습니다.

#Redirect a domain to a subdirectory, while displaying only the domain and not the subdirectory in the browser address bar. 
<IfModule mod_rewrite.c> 

Options +FollowSymLinks 

RewriteEngine On 

RewriteBase/

RewriteCond %{HTTP_HOST} ^example.com [nc] 
RewriteRule ^$ /subdirectory/ [nc,L,QSA] 

RewriteCond %{HTTP_HOST} ^www.example.com [nc] 
RewriteRule ^$ /subdirectory/ [nc,L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

한 번 더 메모. 내 웹 사이트의 모든 요소는 상대 경로를 사용하기 때문에 다시 쓰기 때문에 웹 사이트의 HTML에있는 상대 경로가 파일의 잘못된 루트 디렉토리를보고 있었기 때문에 작업을 수행하기 위해 HTML 루트를 하위 디렉토리로 설정해야했습니다 . 즉, 하위 디렉토리 대신 실제 루트 디렉토리에 연결했습니다. 나는 다음과 같이 하위 디렉토리에 HTML 루트/기본 설정 :

<head> 
<base href="http://<?php echo $_SERVER['HTTP_HOST']; ?>/subdirectory/" /> 
</head> 

업데이트 : 나는 한 단계 더있어 너무

좋아요. 다음 코드는 웹 사이트 파일을 루트의 하위 디렉토리에 넣을 때 작동합니다.

그러나 여전히 문제가 있습니다. example.com을 example.com/subdirectory로 리디렉션하지만 example.com/index.php는 example.com/subdirectory/index.php로 리디렉션하지 않습니다.

나는 index.php를 포함하여 모든 파일에서 작동 할 수 있도록하는 방법을 알아 내려고하고 있습니다.

#Redirect a domain to a subdirectory, while displaying only the domain and not the subdirectory in the browser address bar. 
<IfModule mod_rewrite.c> 

Options +FollowSymLinks 

RewriteEngine On 

RewriteBase/

RewriteCond %{HTTP_HOST} ^example.com [nc] 
RewriteRule ^$ /subdirectory/ [nc,L,QSA] 

RewriteCond %{HTTP_HOST} ^www.example.com [nc] 
RewriteRule ^$ /subdirectory/ [nc,L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

한 번 더 메모. 내 웹 사이트의 모든 요소는 상대 경로를 사용하기 때문에 다시 쓰기 때문에 웹 사이트의 HTML에있는 상대 경로가 파일의 잘못된 루트 디렉토리를보고 있었기 때문에 작업을 수행하기 위해 HTML 루트를 하위 디렉토리로 설정해야했습니다 . 즉, 하위 디렉토리 대신 실제 루트 디렉토리에 연결했습니다.재 작성 규칙의 도메인이 일치하지 않는 경우, 아파치 주소 표시 줄에 다시 것

<head> 
<base href="http://<?php echo $_SERVER['HTTP_HOST']; ?>/subdirectory/" /> 
</head> 
+0

콘텐츠가 이전 도메인과 동일한 하위 도메인에 있습니까? –

+0

은 동일한 서버의 도메인 및 하위 도메인입니까? – miah

+0

@misplacedme : 아니요, 하위 도메인의 콘텐츠가 다릅니다. –

답변

0

다음과 같이 나는 하위 디렉토리에 HTML 루트/기본을 설정합니다.

RewriteCond %{HTTP_HOST} ^(www\.)?domain.com 
RewriteRule ^(.*)$ subdomain_directory/$1 [QSA L] 

그것은 같은 디렉토리에없는 경우, 당신은 일해야 하위 도메인 디렉토리에 링크 도메인 디렉토리의 심볼릭 링크를 만들 수 있습니다. FollowSymlinks 또는 SymLinksIfOwnerMatch을 아직 설정하지 않은 경우 허용해야합니다.

+0

맞습니다. 다시 쓰기 규칙의 도메인이 일치하지 않습니다. FollowSymlinks 및/또는 SymLinksIfOwnerMatch가 작동하는 코드 예제를 게시 할 수 있습니까? 나는 그것을 온라인으로 찾았지만, 정확히 내가 원하는 것을 수행하는 코드 예제를 찾지 못했습니다. –

+0

ssh 액세스 권한이있는 경우'ln -s {/ path/to/subdomain-directory} {link-name} '을 실행하십시오. 여기서 link-name은 재 작성에서 참조하는 파일입니다. 셸 액세스 권한이없는 경우 호스팅 회사에 문의해야합니다. – miah

+0

나는 당신이 말하는 것을 이해하고 있는지 확신하지 못합니다. 나의 의도는 domain.com의 루트 디렉토리에있는 htaccess 파일에 스크립트를 추가하여이 작업을 수행하는 것이 었습니다. –

0

업데이트 2 :

이 코드는 나를 위해 작동하는 것 같군

:

#Redirect a domain to a subdirectory, while displaying only the domain and not the subdirectory in the address bar of a browser 
<IfModule mod_rewrite.c> 

Options +FollowSymLinks 

RewriteEngine On 

RewriteBase/

RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com 
RewriteCond %{REQUEST_URI} !/subdirectory/ 
RewriteRule ^(.*)$ /subdirectory/$1 [L] 

</IfModule> 

htaccess로 코드의 조각은 웹 사이트의 코드에 HTML 경로를 깰 않지만,이 HTML을 재정 의하여 반박 할 수있다 같은 같은 웹 사이트의 헤더에서 HTML 기본 태그를 추가하여 기본 경로는 : 또한

<head> 
<base href="http://www.mydomain.com/subdirectory/" /> 
</head> 

당신은 당신의 websit에서 경로/링크 각별히주의해야합니다 전자의 자바 스크립트 코드를 사용하여 작업을 수행 할 수도 있습니다.

PHP의 경로와 관련하여 리디렉션 후에 웹 사이트의 PHP 코드를 유지하려면 상대 경로를 사용해야합니다.

온라인에서 사용할 수있는 많은 htaccess 코드가 작동하지 않기 때문에 단지 4 시간의 절전으로이 모든 것을 파악하는 데 2 ​​일이 걸렸습니다. 다행히도 이것은 다른 사람들에게 많은 일, 스트레스 및 좌절을 덜어줍니다.

행운을 빈다. :)