web-dev-qa-db-ja.com

Apache / centos Webサーバー上のページをリダイレクトする最良の方法

仮想ホストを使用して、1つのIPアドレスから2つのWebサイトを実行するCentos 6.5 Webサーバーがあります。

domain1.comとdomain2.com-どちらも上記の同じWebサーバーでホストされています。

「たとえば」のように、domain1からdomain2に約40ページをリダイレクトする必要があります。

domain1.com/page1 -> domain2.com/new-page-1
domain1.com/welcomepage -> domain2.com/new-welcome-page
domain1.com/johnsmith -> domain2.com/elvis
domain1.com/test -> domain2.com/production

*リダイレクトしているページは同じ構造/名前ではなく、完全に異なる構造/名前になっていることに注意してください。

誰かがこのタスクを達成するために私ができる/する必要があることを提案できますか?

編集#1 httpd.confファイルのVirtualHostセクションでこれを試みました。私のエントリーについては以下を参照してください。

<VirtualHost *:80>
 ServerName domain1.com
 ServerAlias www.domain1.com
 RedirectPermanent / http://www.domain2.com/page12345/
</VirtualHost>

<VirtualHost *:80>
 ServerName domain1.com
 ServerAlias www.domain1.com
 RedirectPermanent /AboutUs/Founders http://www.domain2.com/about-us-founders/
</VirtualHost>

上記の2つのエントリでは、最初のエントリのみが正しく機能し、正しくリダイレ​​クトされています。 2つ目は http://www.domain2.com/page12345/AboutUs/Founders にリダイレクトしています。

3
Vitaliy

そのような場合に最善の場合が最も簡単なソリューション。 40 Redirect ディレクティブをdomain1 VirtualHost構成に追加します。ここで行う必要があるのは、リダイレクトの永続的または一時的なステータスのみです。

<VirtualHost *:80>
   Servername domain1.com
   RedirectTemp /page1 http://domain2.com/new-page-1
   RedirectPermanent /welcomepage http://domain2.com/new-welcome-page
</VirtualHost>

上記の編集#1への応答:


ServerNameまたはServerAliasで同じドメイン名を持つ複数のVirtualHostスタンザを使用する場合、最初のものだけが有効で、後続のものは無視されます。

1つのVirtualHostスタンザは複数のRedirectディレクティブを保持できるため、2番目のRedirectディレクティブを最初のvirtualhostスタンザに移動し、2番目を削除します。

2番目上記のリンクにあるマニュアルを読む本当に役立つ

URL-pathで始まるすべての要求は、ターゲットURLの場所にあるクライアントにリダイレクト要求を返します。一致したURL-path以外の追加のパス情報がターゲットURLに追加されます。
例:Redirect /service http://foo2.example.com/service
クライアントが http://example.com/service/foo.txt を要求すると、アクセスするように指示されます http://foo2.example.com/ service/foo.txt

これは、www.domain1.com/AboutUs/Foundersに対するリクエストでRedirectPermanent / http://www.domain2.com/page12345/元のリクエストをwww.domain2.com/page12345/AboutUs/Foundersにリダイレクトします

ApacheはRedirectディレクティブを順番に処理するため、Redirect行を正しく順序付けることでこれを解決できます。最長のURLパスから始めます。そうしないと、短いディレクトリでの有効なリダイレクトによってキャッチされます。

<VirtualHost *:80>
   Servername domain1.com
   Redirect /AboutUs/Founders http://www.domain2.com/about-us-founders/
   Redirect /AboutUs/         http://www.domain2.com/about-us/
   Redirect /index.html       http://www.domain2.com/page12345/
   RedirectMatch ^            http://www.domain2.com/page12345/
</VirtualHost>

http://domain1.com のみで構成されるリダイレクトリクエストの場合、^ むしろその後 /多くの場合、IndexDocumentも明示的にリダイレクトすることをお勧めします。そのため、/ index.htmlエントリを使用します。

4
HBruijn