.htaccess 모든 페이지를 새 도메인으로 리디렉션


218

어떤 리디렉션 규칙 나는 아래에있는 모든 페이지 리디렉션을 사용하는 것이 olddomain.example로 리디렉션을 newdomain.example?

사이트는 구조가 완전히 다르므로 이전 도메인 아래의 모든 페이지 를 새 도메인 색인 페이지 로 리디렉션 하고 싶습니다 .

나는 이것이 olddomain.example 기본 디렉토리에 있다고 생각했다.

RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.example/ [R=301]

그러나로 이동 olddomain.example/somepage하면로 리디렉션됩니다 newdomain.example/somepage. newdomain.example페이지 접미사 가 없는 경우 에만 리디렉션이 필요합니다.

마지막 부분을 어떻게 유지합니까?


8
, 시간을 절약 할 수있는 바로 가장 좋은 대답 아래로 스크롤 RewriteEngine on RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]* stackoverflow.com/a/7578810/1066234
카이 NOACK

2
특히 SEO 관점에서 인덱스 / 홈 페이지로 다 대일 리디렉션하는 것이 일반적으로 나쁜 생각임을 지적하는 것이 좋습니다. 구글은 그것을 소프트 404로 볼 것으로 보인다.
MrWhite

답변:


201

다음과 같을 수 있습니다.

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^OLDDOMAIN\.com$ [NC]
RewriteRule ^(.*)$ http://NEWDOMAIN.com [R=301,L]

음, 브라우저를 새로 고침 하시겠습니까? 여기에서 xampp로 리디렉션합니다. 방금 테스트했습니다.
당신

내 나쁜 ... 그것은 작동합니다, 내 호스팅 서비스는 다른 것들을 리디렉션했습니다. 감사! :)
Yuval Adam

25
그렇지 RewriteCond %{HTTP_HOST} !^NEWDOMAIN\.com$ [NC]않습니까?
Jim Geurts 2016 년

1
긴 겨울이 지난 후 코드를 편집하여 마침내 작동했습니다. (올 바르고 오래된 도메인과 다른 EQUAL 인 경우 리디렉션하는 것이 맞습니다. 문제였습니다!)
carla

5
@JimGeurts newdomain이 아닌 모든 것을 리디렉션하려는 경우에만 해당됩니다. 그러나이 경우 이전 도메인 만 리디렉션하고 싶었습니다.
carla

442

아래 답변으로 인해 무한 리디렉션 루프가 발생할 수 있습니다 ...

여기서는 URL의 도메인 이름 뒤의 모든 것을 새 도메인 URL의 동일한 사본으로 리디렉션합니다.

RewriteEngine on 
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]

www.example.net/somepage.html?var=foo 로 리디렉션 www.newdomain.com/somepage.html?var=foo


21
이 요청은 newdomain.com에 대한 요청조차도 모든 요청을 리디렉션하지 않습니까? 이 경우 본질적으로 두 개의 중복 요청이 발생합니까?
Bill Dami

33
문제는 모든 것을 홈페이지로 리디렉션하는 것입니다
kravits88

28
이것이 질문에 대한 답변은 아니지만 SE 에서이 질문에 정확하게 도달했습니다. 감사 !!!
dav

하위 도메인에서 새 도메인으로 리디렉션하려면 어떻게해야합니까?
Sukhjinder Singh

2
빌의 질문에 누군가 대답 해 주시겠습니까? 중복 요청 및 / 또는 불필요한 재 작성을 방지하기 위해 RewriteCond를 사용해서는 안됩니까? 필요하지 않더라도 매번 다시 쓰면 눈에 띄는 영향이 없을 것이라고 생각합니다. 그러나 왜 그렇습니까?
Andrew

80

명확히하기 위해, 방해가 된 호스팅 리디렉션을 제거한 후 내 원래 솔루션도 작동합니다.

RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.com/ [R=301]

이것은 기본 색인으로 리디렉션되며, 이는 귀하의 질문에 관한 것입니다. 명확성을 위해, 근접성으로 인해 귀하의 진술은이 바로 위에있는 user968421의 답변을 향한 것으로 보이므로 의도가 새 도메인의 해당 파일 이름으로 리디렉션 될 때 user968421의 답변은 정확합니다.
RationalRabbit

19

내 Wordpress 블로그에 이것을 .htaccess로 사용했습니다. 그것은 변환 //www.blah.example/asad : HTTP , HTTP : //blah.example/asad , HTTP : //www.blah.example2/asad 등을 HTTP : //blah.example/asad 모두에게 감사를 다른 답변 나는 이것을 알아 냈습니다.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^YOURDOMAIN\.example$ [NC]
RewriteRule ^(.*)$ https://YOURDOMAIN.example/$1 [R=301,L]

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

2
나는 이것이 가장 포괄적 인 답변이라고 생각합니다 : 모든 페이지의 순위를 유지하며 기본 도메인이 아닌 모든 도메인에 대한 포괄입니다! 무엇이 더 좋을까요?
nzn

1
여기서 핵심은 도메인 재 작성 규칙이 워드 프레스 색인 재 작성 규칙 보다 우선한다는 것입니다.
MrMoxy 2016 년

14
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^olddomain.com$ [OR]
  RewriteCond %{HTTP_HOST} ^www.olddomain.com$
  RewriteRule (.*)$ http://www.newdomain.com/$1 [R=301,L]
</IfModule>

이것은 나를 위해 일했다


예,이 방법은 깨끗하고 훌륭합니다!
Cody

-index.php? aa = 9가 새로운 도메인으로 매개 변수를 전달할 경우 UR1의 매개 변수로 리디렉션됩니다
Darksymphony

13

이 작업을 수행하는 다양한 방법과 다양한 리디렉션이 있으며 아래에 나열했습니다.

301 (영구) 리디렉션 : 전체 사이트를 영구적으로 다른 URL을 가리 킵니다. 가장 일반적인 리디렉션 유형이며 대부분의 상황에서 유용합니다. 이 예에서는 "example.com"도메인으로 리디렉션합니다.

# This allows you to redirect your entire website to any other domain
Redirect 301 / http://example.com/

302 (임시) 리디렉션 : 전체 사이트를 다른 임시 URL로 지정하십시오. 임시 방문 페이지가 있고 나중에 기본 방문 페이지로 다시 전환하려는 경우 SEO 목적에 유용합니다.

# This allows you to redirect your entire website to any other domain
Redirect 302 / http://example.com/

index.html을 특정 하위 폴더로 리디렉션하십시오.

# This allows you to redirect index.html to a specific subfolder
Redirect /index.html http://example.com/newdirectory/

기존 파일을 새 파일 경로로 리디렉션하십시오.

# Redirect old file path to new file path
Redirect /olddirectory/oldfile.html http://example.com/newdirectory/newfile.html

특정 색인 페이지로 리디렉션 :

# Provide Specific Index Page (Set the default handler)
DirectoryIndex index.html

이 같은 첫 번째 예 $ 1을 추가하면 Redirect 301 / http://example.com/$1 원본 사이트의 모든 페이지를 새로운 사이트 루트로 리디렉션됩니다
야신 Mokni을

@YassinMK $1여기서는 필요하지 않습니다. RedirectMatch지시어를 생각하고 있습니다 (그러나 $1참조를 위해 캡처 그룹을 정의해야합니다 ).
MrWhite

이러한 모든 Redirect지시문은 같은 방식으로 리디렉션되지만 OP는 새 사이트의 홈 페이지로만 리디렉션하려고하지만 (자체 권장하지는 않지만). RedirectMatch특정 URL로 리디렉션하려는 경우 지시문 을 사용해야 할 수도 있습니다 .
MrWhite

301 대신 Redirect permanent / h ttps : //www.example.com을 쓸 수도 있습니다.이 작업은 vhost 파일에서 수행 할 수 있습니다
Yvon Huynh

그러나 .htaccess와 관련된 질문이므로 왜 vhost 파일을 언급합니까?
RustyIngles

9

일부 위치에서 하위 도메인으로 리디렉션하려는 경우 다음을 사용할 수 있습니다.

Redirect 301 /Old-Location/ http://subdomain.yourdomain.com


가장 좋은 방법입니다. 많은 웹 호스트들이 .htaccess에서 RewriteEngine의 사용을 허용하지 않았기 때문에. 이것은 어쨌든 잘 작동합니다!
Sprinterfreak

리디렉션하려면 RewriteEngine을 사용해야합니다. 문제가 발생한 이유는 RewriteEngine이 이미 활성화되어 있고 리디렉션 규칙 만 필요했기 때문입니다. 도움이되어서 다행입니다.
EmptySD

사실이 아니다. 모든 Rewrite를 건너 뛰고 사용할 때RewriteEngine On 500 내부 오류가 발생합니다. 매우 제한된 웹 공간입니다. 사용하는 Redirect 301 / http://foo것이 가능한 유일한 방법입니다.
Sprinterfreak

6

기존 사이트를 리디렉션하는 새 도메인이 다른 호스트에있는 경우 간단히 Redirect

Redirect 301 / http://newdomain.com

그러면 모든 요청이에서 (으) olddomain로 리디렉션됩니다 newdomain.

Redirect지시문이 작동하지 않거나 Redirect loopnewdomain과 olddomain이 모두 동일한 호스트에있는 경우 mod-rewrite요청한 호스트 헤더를 기반으로 리디렉션하는 데 사용해야 합니다.

RewriteEngine on


RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com$
RewriteRule ^ http://newdomain.com%{REQUEST_URI} [NE,L,R] 

5

내 평판은 답변에 대한 의견을 제시 할 수 없지만 여기에 가장 높은 등급의 답변에 오류가 있음을 지적하고 싶었습니다.

RewriteEngine on 
RewriteRule ^(.*)$ http://www.newdomain.com$1 [R=301,L]

$ 1 앞에 슬래시가 있어야합니다.

RewriteEngine on 
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]

3

SymLinks 솔루션은 서버에서 작동하지 않으므로 PHP에서 If를 사용했습니다.

function curPageURL() {
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
    } else {
        $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
    }
    return $pageURL;
}
$redirect = str_replace("www.", "", curPageURL());
$remove_http_root    = str_replace('http://', '', $redirect);
$split_url_array     = explode('/', $remove_http_root );


if($split_url_array[0] == "olddomain.com"){
    header("Location: http://www.newdomain.com/$split_url_array[1]");
    die();
}

2

경로 접두사가 변경된 경우 다시 작성된 경로에 추가 된 이전 버전의 아파치 (따라서 mod_rewrite)의 버그입니다. 여기를 보아라

나는 그것이 apache2 V2.2.12에서 수정되었다고 생각합니다. 내가 그것을 찾을 때 여기에 추가 할 특별한 플래그가 있습니다 (No Path의 경우 NP라고 생각합니다)

RewriteRule ^(.*)$ http://newdomain.com/ [??]

나는 거의 한 달 동안 이것에 대해 머리를 부딪쳤다
Question Mark

2

유용성 관점에서 요청과 함께 경로를 보내면 (즉, 현재 가지고있는 것) 새 사이트에서 처리하도록하는 것이 좋습니다.

"/ 제품"을 검색했습니다.

불행히도이 페이지는 사라졌습니다. 대신 "/ new_products"를 방문 하시겠습니까?

(그리고 여전히 더 좋은 방법은 자동으로 수행하는 것입니다.)

이것은 분명히 더 큰 웹 사이트에 대한 많은 코딩 및 휴리스틱이지만, 내 의견으로는 사용자 만족도 측면에서 돈을 지불 할 것입니다 (꿈 제품의 신중하게 저장된 책갈피가 newdomain.com의 첫 페이지로 연결되는 경우 답답해.)


언급 된 웹 사이트의 경우 전체 웹 사이트가 변경되었으므로 이것은 거의 관련이 없지만 절대적으로 정확합니다. 웹 사이트는 가능한 한 하위 호환성이 있어야합니다. +1
유발 아담

2

매개 변수 나 페이지없이 다른 사이트 (도메인)를 완료하도록 리디렉션하려면 다음을 사용하십시오.

RewriteEngine On
RewriteRule / http://new-domain.com/$1? [R=301]

1
.htaccess문서 루트의 URL과 단순히 일치하지 않으므로 사용할 때 예상대로 작동 하지 않습니다. 서버 구성 또는 VirtualHost 컨텍스트에서 작동합니다.
MrWhite

2

user968421의 답변과 OP의 솔루션을 시도했지만 브라우저가 결제 페이지에 대한 보안 오류를 표시했습니다. 왜 그런지 정확히 말할 수 없습니다.

우리 호스트 (Site Ground)도 알아낼 수 없었습니다.

최종 솔루션은 가까웠지만 user968421의 답변에 약간의 조정이있었습니다 (부록 : OP와 달리 홈페이지뿐만 아니라 해당 페이지로 리디렉션하려고 $1했으므로 user968421의 백 도메인 참조 ]을 유지했습니다. 대답):

RewriteEngine on
RewriteRule (.*) https://newdomain.com/$1 [R=301,L]

Host Gator 기사가 권장하는 이 htaccess 리디렉션 생성기 에서 조정이 필요합니다 (절망적 인 시간, 절망적 인 조치, 애매한가?).


2

이와 같이 간단하며 URL에서 새 도메인으로 후행 쿼리를 전달하지 않습니다.

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule .* https://www.newdomain.com/? [R=301,L]

실제로 나를 위해 일한, 새로운 도메인에 슬러그를 전달하지 않고 솔루션이 필요합니다. 감사합니다 Dsynmphony
Faisal Mehmood Awan

1

일부 로컬 파일도 제공해야하는 경우 Hoster에서 조건부 리디렉션을 사용 Options -FollowSymLinks하거나 AllowOverride -Options사용하지 않도록 설정 하십시오 .

샘플 .htaccess

# Redirect everything except index.html to http://foo
<FilesMatch "(?<!index\.html)$">
    Redirect 301 / http://foo/
</FilesMatch>

이 예제는 로컬 index.html을 제공하고 다른 모든 직원을 새 도메인으로 리디렉션합니다.


1

이 방법을 사용하여 모든 것을 홈페이지 새 도메인으로 리디렉션하십시오.

RewriteCond %{HTTP_HOST} ^olddomain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.olddomain\.com$
RewriteRule ^(.*)$ "https\:\/\/newdomain\.com\/" [R=301,L]

0

이전 답변은 저에게 효과적이지 않았습니다.

이 코드를 사용했습니다. OSX를 사용하는 경우 올바른 형식을 사용해야합니다.

Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?OLDDOMAIN\.com$ [NC]
RewriteRule (.*) http://www.NEWDOMAIN.com/ [R=301,L]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.