.htaccessはすべてのページを新しいドメインにリダイレクトします


218

リダイレクト先のすべてのページをリダイレクトするには、どのリダイレクトルールを使用olddomain.examplenewdomain.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
Kai Noack

2
特にSEOの観点からすると、インデックス/ホームページへの多対1のリダイレクトは一般的に悪い考えであることを指摘する価値があります。グーグルはそれをソフト404と見ている可能性が高い。
MrWhite

回答:


201

このようになるかもしれません:

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

ええと、ブラウザをリロードしてみませんか?ここでもxamppでリダイレクトしています。テストしたところです。
YOU

私の悪いこと...それは機能します、私のホスティングサービスはfu ****のことでした他のいくつかのリダイレクトを持っていました。ありがとう!:)
ユヴァルアダム

25
それはありませんRewriteCond %{HTTP_HOST} !^NEWDOMAIN\.com$ [NC]か?
Jim Geurts

1
長い冬の後、私はコードを編集して、最終的に機能するようにしました。(正しいことは、古いドメインにEQUALであり、DIFFERENTではない場合にリダイレクトすることです!それが問題でした)
carla

5
@JimGeurts newdomain以外のすべてのものをリダイレクトする場合のみ。ただし、この場合は、古いドメインのみをリダイレクトする必要がありました。
カーラ2017年

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のリクエストであっても、すべてのリクエストをリダイレクトしませんか?そして、それらの場合に本質的に2つの重複したリクエストを引き起こしますか?
Bill Dami 2013

33
問題は、すべてをホームページにリダイレクトすることです
kravits88

28
これは質問の答えではありませんが、私は正確にこの答えを求めてSEからこの質問に来ました。ありがとう!!!
dav

サブドメインから新しいドメインにリダイレクトするにはどうすればよいですか?
Sukhjinder Singh 2015

2
誰かがビルの質問に答えてくれませんか。これはRewriteCondを使用して、要求の重複や不要な再書き込みを防ぐべきではありませんか?必要はありませんが、毎回書き直すことによる大きな影響はないと思います。しかし、なぜそれをするのか。
Andrew

80

明確にするために、邪魔だったホスティングリダイレクトを削除した後、私の元の解決策も機能します。

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

これにより、デフォルトのインデックスにリダイレクトされます。これは、質問に関するものです。明確にするために、近接性のため、ステートメントはこのすぐ上のuser968421の回答に向けられているように見えるため、意図が新しいドメインの対応するファイル名にリダイレクトすることである場合、user968421の回答は正しいです。
RationalRabbit

19

私はWordpressブログでこれを.htaccessとして使用しました。これは、変換//www.blah.example/asad:HTTPHTTP://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
ここで重要なのは、ドメイン書き換えルールがWordPressインデックス書き換えルールの前にあることです。
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>

これは私のために働いた


はい、この方法はきれいでいいです!、私にもうまくいきました。
コーディ

これは、URlのパラメーターがあればリダイレクトされます
-index.php

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 と、元のサイトのすべてのページが新しいサイトルートにリダイレクトされます
Yassine Mokni

@YassinMKこれ$1は必須ではありません。RedirectMatchディレクティブを考えています(ただし、$1参照するためのキャプチャグループを定義する必要があります)。
MrWhite

これらのRedirectディレクティブはすべてlike for likeにリダイレクトされますが、OPは新しいサイトのホームページにのみリダイレクトすることを望んでいます(ただし、それ自体は推奨されません)。RedirectMatch特定のURLにリダイレクトするだけの場合は、ディレクティブを使用する必要があります。
MrWhite

301の代わりに、リダイレクトパーマネント/ h ttps://www.example.comと書くこともできます。これは、vhostファイルで行うことができます
Yvon Huynh

しかし、.htaccessに関連する質問なので、なぜvhostファイルに言及するのですか?
RustyIngles 2017

9

ある場所からサブドメインにリダイレクトしたい場合は、以下を使用できます。

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


それが最善の方法です。多くのウェブホスティングが.htaccessでRewriteEngineの使用を許可しなかったからです。とにかくこれはうまくいきます!
Sprinterfreak

リダイレクトするには、RewriteEngineを使用する必要があります。問題が発生した理由は、RewriteEngineがすでにアクティブであり、リダイレクトルールのみが必要だったためです。お役に立ててうれしいです。
EmptySD 2015年

違います。すべての書き換えをスキップし、使用するとRewriteEngine On500内部エラーがスローされます。それは非常に制限されたウェブスペースです。使用すること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

これは、古いバージョンのapache(およびmod_rewrite)のバグであり、変更された場合、パスのプレフィックスが書き換えられたパスに追加されていました。 こちらをご覧ください

私はそれがapache2 V2.2.12で修正されたと思います、私が見つけたときにここに追加する必要がある特別なフラグがあります(私はそれがパスなしのNPだったと思います)

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

私は約1か月間これに頭を打ちました
疑問符

2

使いやすさの観点から、リクエストと一緒にパス(つまり、現時点でのパス)も送信し、新しいサイトで処理することをお勧めします。

「/ products」を検索しました。

残念ながら、このページはなくなっています。代わりに「/ new_products」にアクセスしますか?

(さらに良いことに、これを自動的に行います。)

これは明らかに、より大きなWebサイトでは多くのコーディングとヒューリスティックですが、私の意見では、ユーザーの満足度の点で効果があります(夢の製品のブックマークを注意深く保存して、newdomain.comのフロントページにアクセスすると、これはイライラします。)


上記のウェブサイトでは、ウェブサイト全体が変更されているため、これはほとんど無関係ですが、あなたは完全に正しいです。Webサイトは、可能な限り下位互換性がある必要があります。+1
ユヴァルアダム

2

パラメータやページのない新しい別のサイト(ドメイン)にリダイレクトする場合は、次のようにします。

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

1
これは.htaccess、ドキュメントルート内のどのURLにも一致しないため、使用時に期待どおりに機能しません。サーバー構成またはVirtualHostコンテキストで動作します。
MrWhite

2

user968421の回答とOPの解決策を試しましたが、ブラウザがチェックアウトページのセキュリティエラーをポップアップしました。理由は正確には言えません。

私たちのホスト(サイトグラウンド)もそれを理解できませんでした。

最終的な解決策は近いものでしたが、user968421の回答を少し調整しました(補足:OPとは異なり、ホームページだけでなく、対応するページにリダイレクトしようとしていたため$1、user968421の後方参照[ ドメインの後] を維持しました回答):

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

Host Gatorの記事で推奨されているこのhtaccessリダイレクトジェネレーターから微調整を得ました(絶望的な時間、絶望的な対策、amiright?)。


2

このように単純で、URLから新しいドメインへの末尾のクエリは実行されません。

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

それは実際に私のために働きました、新しいドメインにスラグを渡すことなく解決策が必要ですThanks Dsynmphony
ファイサルMehmood Awan

1

いくつかのローカルファイルも提供する必要がある場合は、ホスティングサービスで条件付きリダイレクトを使用しOptions -FollowSymLinksAllowOverride -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.