2012-03-18 23 views
0

Apache Mod-Rewrite moduledとその.htaccessファイルを使用して、私の古いドメインを新しいドメインに移行しています。 我々はそれが今、そのようなwww.newurl www.oldurl.comたと同様に、ドメイン名を除い古いドメインを新しいドメインにリダイレクトする.htaccess

  1. URLの
  2. データベース

を含む新しいドメインのほぼ同じ構造を有しています。 COMとこれは私が1の場合、我々時間を除いて正常に動作することが

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule (.*)$ http://www.newurl.com/$1 [R=301,L] 

上記の設定はそう古いドメインの私の.htaccessファイル内に持っているものです以前のドメインのいくつかのURLが削除されているか構造が変更されているため、上記のルールではうまくいきません.iは私の.htaccessファイルに上記のようなものを追加したことを知りました

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule (.*)$ http://www.newurl.com/$1 [R=301,L] 
Redirect 301 /my-page http://www.newurl.com/your-page 

私はこのようなURLを合計20個持っています。私は20 +すべてのURLをそこに新しいURLにマップする必要があると思います。ファイルに挿入する順番に注意する必要があります。

また、Apacheがどのように動作するのか不思議ですが、マップされた各URLをすべて一致させて調べますか?それとも別の方法で動作しますか?

答えて

1

RedirectディレクティブはRewriteCond条件に拘束されず、常に http://www.newurl.com/your-page /私のページにリダイレクトされます、また、mod_rewriteのはmod_aliasに優先していますしたがって、RewriteRule (.*)$ http://www.newurl.com/$1 [R=301,L]の規則が適用されます。の前にRedirectディレクティブが参照されます。しかし、.htaccessファイルは、のドキュメントルート内に位置ならば、両方のoldurl.comnewurl.comドメインは、Redirectディレクティブは、ブラウザがこのようにhttp://www.newurl.com/your-page

に(再び)リダイレクト、http://www.newurl.com/my-pageにリダイレクトされます後に適用されます

mod_rewriteが最初に適用されるので、これらの順序は関係ありません。新しいサイトで新しいURLにリダイレクトする必要がある20のURLがある場合は、それぞれをRedirectで列挙できます。あなたではなく、ブラウザが二回リダイレクトさがないと思いますそれ以外の場合、あなたはmod_rewriteのエンジンを使用してそれらを列挙することができます:を注文

RewriteEngine On 

# redirect the changed URLs individually 
RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule ^my-page$ http://www.newurl.com/your-page [R=301,L] 

RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule ^my-page2$ http://www.newurl.com/your-page2 [R=301,L] 

RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule ^my-page3$ http://www.newurl.com/your-page3 [R=301,L] 

# Finally, redirect everything else as-is 
RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule (.*)$ http://www.newurl.com/$1 [R=301,L] 

注ここ問題を行います。 HTTP_HOSTの2つの条件を繰り返すことは醜いですが、SKIPを使用して回避することができますが、繰り返してもよいでしょう。しかし、あなたがサーバーの設定やvhostの設定にアクセスできる場合は、RewriteMap Directiveを見てください。あなたのケースでは古いURLから新しいURLへのマッピングを作成することができ、個々の変更されたすべてのURLの書き換えをa 1つの:

サーバー/バーチャルホストの設定、このような何か内側:

RewriteMap newurls txt:/path/to/file/map.txt 

/パス/に/ファイル/マップ。 txtのようになります:

my-page your-page 
my-page2 your-page2 
my-page3 your-page3 
etc... 

そして、あなたの組み合わせのルールは次のようになります。貴重な入力の

RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule ^(.*)$ http://www.newurl.com/${newurls:$1} [R=301,L] 

RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule (.*)$ http://www.newurl.com/$1 [R=301,L] 
+0

おかげで、残念ながら私は 'サーバconfig'をか'バーチャルホストの設定にアクセスすることはできません。 'ファイル(共有ホスティング)なので、私はあなたが示唆するようにURLを列挙するように解決しなければならないと信じています。 –

関連する問題