web-dev-qa-db-ja.com

Apache VirtualHost内のURLをリダイレクトしますか?

私はいくつかのVirtualHostsを設定したApacheを備えた専用サーバーを持っています。 wwwドメインと非wwwドメインを処理するために1つ設定しました。

WwwのVH .confファイル:

<VirtualHost *>
  DocumentRoot /var/www/site
  ServerName www.example.com
  <Directory "/var/www/site">
    allow from all
  </Directory>
</VirtualHost>

これで.htaccess

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_Host} ^www.example.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

Wwwを非wwwバージョンにリダイレクトする簡単な方法はありますか?現在、両方のバージョンを同じDocumentRootに送信し、.htaccessを使用していますが、VirtualHostファイルで実行できるはずです。

61
DisgruntledGoat

RewriteBaseルールとは別に、mod_rewriteルールはVirtualHostsファイルで問題ありません。私はこれで終わりました:

<VirtualHost *>
  ServerName www.example.com
  RewriteEngine on
  RewriteCond %{HTTP_Host} ^www.example.com
  RewriteRule ^/(.*)$ http://example.com/$1 [L,R=301]
</VirtualHost>

編集:コメントでのjoschiの助言に基づいて、私はmod_aliasから Redirect ディレクティブを使用して、この簡略化されたバージョンを使用しています:

<VirtualHost *>
  ServerName www.example.com
  Redirect 301 / http://example.com/
</VirtualHost>
108
DisgruntledGoat

301リダイレクトには注意してください。デフォルトでは、301リダイレクトを受信するブラウザーはそれを永続的に保存します。つまり、そのブラウザーがドメインにアクセスしようとしたときに表示される内容を制御できなくなりますwww.example.com

たとえば、このディスカッションを参照してください http://getluky.net/2010/12/14/301-redirects-cannot-be-undon/

したがって、キャッシュされないことを確認するか、mod_proxyを使用します(mod_proxyをお勧めします)。

ユーザーにブラウザーのアドレスバーでURLの変更を表示しても問題ない場合は、mod_rewriteを使用します。

<VirtualHost *>
 ServerName www.example.com
 RewriteEngine on
 RewriteCond %{HTTP_Host} ^www.example.com
 RewriteRule ^/(.*)$ http://example.com/$1 [L,R=301,E=nocache:1]
## Set the response header if the "nocache" environment variable is set
## in the RewriteRule above.
 Header always set Cache-Control "no-store, no-cache, must-revalidate" env=nocache
## Set Expires too ...
 Header always set Expires "Thu, 01 Jan 1970 00:00:00 GMT" env=nocache
</VirtualHost>

「リダイレクト」をユーザーに表示しないようにするには、mod_proxyを使用します。

<VirtualHost *>
 ServerName www.example.com
 ProxyRequests Off
 <Proxy *>
 Order Deny,Allow
 Deny from all
 Allow from 203.0.113.67
 </Proxy>
 ProxyPass / http://example.com/
 ProxyPassReverse / http://example.com/
</VirtualHost>

Mod_proxyが正しく構成されていない場合、ネットワークに害を及ぼす可能性があることに注意してください。

4
Marco Trevisan

あなたは付け加えられます ServerAlias example.comVirtualHostに変換しますが、パフォーマンスはリダイレクトとは異なります。

編集

リダイレクトする必要があり、高度な機能は必要ないため、Redirectを使用するだけで十分なようです。 VirtualHostディレクティブの下にRedirectを置きます。

クライアント側のソリューションは、meta refresh 鬼ごっこ。

2
Warner

サーバー名www.example.comに対して1つの仮想ホストを作成し、サーバー名example.comを持つ別の仮想ホストにリダイレクトさせることができます。

1
Devin Ceartas