私はいくつかの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ファイルで実行できるはずです。
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>
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が正しく構成されていない場合、ネットワークに害を及ぼす可能性があることに注意してください。
あなたは付け加えられます ServerAlias example.com
をVirtualHost
に変換しますが、パフォーマンスはリダイレクトとは異なります。
編集
リダイレクトする必要があり、高度な機能は必要ないため、Redirect
を使用するだけで十分なようです。 VirtualHostディレクティブの下にRedirect
を置きます。
クライアント側のソリューションは、meta refresh
鬼ごっこ。
サーバー名www.example.comに対して1つの仮想ホストを作成し、サーバー名example.comを持つ別の仮想ホストにリダイレクトさせることができます。