web-dev-qa-db-ja.com

301 VHOSTを使用せずにwwwから非wwwにリダイレクトする

Apacheを使用してEC2でWebアプリケーションを実行しています。 wwwをwww以外にリダイレクトしたい。 Googleの検索でこれを使用しましたが、リダイレクトループにつながります。

<VirtualHost *:80>
    ServerName www.domain.com
    Redirect 301 / http://domain.com/
</VirtualHost>

サーバーは1つのドメインのみを処理するため、仮想ホストは使用していません。上記の例で何が間違っている可能性があり、301リダイレクトを行うにはどうすればよいですか?

追伸.htaccessの使用を避けようとしています。

3
codecool

混乱を疑わなければならないので、wwwからno-wwwへのリダイレクトを行う方法について説明します。

1. 2つのドメインに対して2つのVirtualHostを作成し、301リダイレクトを使用します。

NameVirtualHost *:80
<VirtualHost *:80>
    ServerName example.com
    DocumentRoot "/path/to/site"
</VirtualHost>
<VirtualHost *:80>
    ServerName www.example.com
    Redirect 301 / http://example.com/
</VirtualHost>

2. 2つのドメインに対して2つのVirtualHostを作成し、リダイレクトルールで.htaccessを使用します。

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot "/path/to/site1"
</VirtualHost>
<VirtualHost *:80>
    ServerName www.example.com
    DocumentRoot "/path/to/site2"
</VirtualHost>

で/path/to/site2/.htaccessを作成します

Redirect 301 / http://example.com/

3. 1つのVirtualHostを作成し、共通の.htaccessにリダイレクトを設定します。

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot "/path/to/site"
</VirtualHost>

/path/to/site/.htaccessを作成します

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