web-dev-qa-db-ja.com

ApacheでIPアドレスを本名にリダイレクトする

http://10.0.0.1などのIPアドレスでWebサーバーにアクセスしたときに、http://example.comなどのドメイン名にリダイレクトされるようにしたい。 Apache Webサーバーを使用していて、次のことを試しました。

<VirtualHost 10.0.0.1:80>
    Redirect / http://example.com
</VirtualHost>

優先度がより高いため、無限のリダイレクトループを生成しました

<VirtualHost *:80>
    ServerName example.com
    ...
</VirtualHost>

これは私が最終的に提供したい仮想ホストです。

私も試しました

<VirtualHost 10.0.0.1:80>
    ServerName 10.0.0.1
    Redirect / http://example.com
</VirtualHost>

おそらくhttp://10.0.0.1にのみ一致し、http://example.comには一致しないと考えています。しかし、それはまた無限ループを生成します。それを達成する方法はありますか?

IP仮想ホストがメインではなく、唯一の仮想ホストである理由は、サーバー上の他のIPもexample.comを提供できるようにするためです。

4
pupeno

HDの回答は、適切な書き換えルールを提供しましたが、その前に条件を設定する必要があります。 10.10.10.1で実行されている仮想ホストが1つだけであることを確認し、定義を次のようにします。

<VirtualHost 10.0.0.1:80>
    ServerName servername.com
    .....

    RewriteCond %{SERVER_NAME} 10.10.10.1
    RewriteRule /(.*) http://servername.com/$1 [R=301,L]

</VirtualHost>

このように、上記でやろうとしていたことの代わりに、そのIPアドレスに必要な仮想ホストは1つだけです。注:このサーバーに複数の仮想ホストを配置する場合は、残りを異なるIPに配置する必要があります

5
goose

私は同じ設定を試してみましたが、うまくいきます。仮想ホストと競合する他の定義がないことを確認しますか? Apacheログのエラーは何ですか?

このルールも機能します:

RewriteRule ^(.*)$ http://example.com/$1 [R=301,NC]
1
hdanniel

.htaccess以下を追加します。

RewriteCond %{HTTP_Host} ^123\.123\.123\.123
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
0
S Lewis