CentOS7でApacheを使用してwwwを非wwwにリダイレクトする方法
序章
Webサイトまたはアプリケーションをドメインの背後で稼働させている場合、ユーザーがプレーンドメイン名および wwwサブドメインを介してアクセスできるようにすることが望ましい場合がよくあります。 つまり、「www」の有無にかかわらず、ドメインにアクセスできる必要があります。 プレフィックス、例 example.com
また www.example.com
、Webブラウザで、同じコンテンツが表示されます。 これを設定するにはさまざまな方法がありますが、一貫性とSEOを考慮するための最善の解決策は、プレーンまたはwwwのどちらのドメインを選択し、もう一方を優先ドメインにリダイレクトすることです。 このタイプのリダイレクトは、永続リダイレクトまたは「301リダイレクト」と呼ばれ、DNSリソースレコードとWebサーバーソフトウェアを適切に構成することで簡単に設定できます。
このチュートリアルでは、wwwのURLをwww以外のURLにリダイレクトする方法を説明します。 www.example.com
に example.com
、CentOS7上のApacheを使用。 また、www以外のURLからwwwへの別の方向へのリダイレクト方法も示します。 このチュートリアルのUbuntu14.04バージョンは、こちらで入手できます。
NginxをWebサーバーとして使用してこのタイプのリダイレクトを実行する場合は、代わりに次のチュートリアルに従う必要があります: CentOS7でNginxを使用してwwwを非wwwにリダイレクトする方法。
前提条件
このチュートリアルは、スーパーユーザー権限があることを前提としています。 sudo
またはroot、Apacheを実行しているサーバー上。 まだセットアップしていない場合は、次のチュートリアルに従ってください: CentOS7でのサーバーの初期セットアップ。
Apache(httpd)がインストールされていることを前提としています。 この設定をまだ行っていない場合は、Apacheタグの下にこのテーマに関するチュートリアルがいくつかあります。
ドメインを管理しているDNSにレコードを追加できる必要があります。 ドメインをまだお持ちでない場合は、ドメインレジストラから購入し、レジストラのDNSまたはDigitalOceanのDNSで管理できます。 このチュートリアルでは、 DigitalOceanDNSを使用して必要なレコードを作成します。
DNSレコードの構成から始めましょう。
DNSレコードを構成する
目的のリダイレクトを設定するには、 www.example.com
に example.com
またはその逆の場合は、名前ごとにAレコードが必要です。
DNSの管理に使用するものは何でも開きます。 この例では、 DigitalOceanDNSを使用します。
ドメイン(ゾーンとも呼ばれます)レコードがまだ存在しない場合は、ここで作成します。 ホスト名はドメインである必要があります。例: example.com
、およびIPアドレスはApacheサーバーのパブリックIPアドレスに設定する必要があります。 これにより、ドメインが指定したIPアドレスを指すAレコードが自動的に作成されます。 ドメインを管理するために別のシステムを使用している場合は、これを手動で追加する必要がある場合があります。
次に、ホスト名として「www」(部分的なサブドメインが機能しない場合は「 www.example.com 」)を使用して別のAレコードを追加し、同じIPアドレスを指定します。
両方のレコードを作成すると、次のようになります。
注:正規名のAレコードがApache WebサーバーのIPアドレスを参照している限り、これはCNAMEレコードでも機能します。
これで、wwwドメインと非wwwドメインを介してサーバーにアクセスできるようになりますが、リダイレクトを設定する必要があります。 今からやります。
Apacheリライトモジュールを有効にする
301リダイレクトを実行するために、Apache mod_rewriteまたはRewriteモジュールを使用します。 そうすることで、ユーザーが www。プレフィックスの有無にかかわらずサイトにアクセスし、希望するドメインにリダイレクトされるようになります。
CentOS 7のRewriteモジュールは、デフォルトで有効になっています。 何らかの理由で有効になっていない場合は、必ずこの行をApache構成のモジュールセクションに追加してください( /etc/httpd/conf.modules.d/00-base.conf
デフォルト):
LoadModule rewrite_module modules/mod_rewrite.so
.htaccessファイルを有効にする
を使用してリダイレクトルールでApacheを設定します .htaccess
ファイル。 これは、DocumentRootのディレクトリ権限を緩和することによって有効にする必要がある機能です。
Apache構成ファイルを開いて編集します。 CentOSでは、デフォルトの設定ファイルは次の場所にあります。 /etc/httpd/conf/httpd.conf
、したがって、この例ではそれを使用します。
- sudo vi /etc/httpd/conf/httpd.conf
デフォルトのDocumentRootを使用していると仮定すると、 /var/www/html
、それに対応する構成ブロックを見つけ、 <directory "/var/www/html>
. ブロック内で、変更します AllowOverride None
に AllowOverride All
:
<Directory /var/www/html>
...
AllowOverride All
...
</Directory>
保存して終了。
次に、Apacheを再起動して、変更を有効にします。
- sudo systemctl restart httpd
これで、Apacheは読み取り用に構成されました .htaccess
下のどこかにあるファイル /var/www/html
ディレクトリ。 ここで、書き換えルールを追加しましょう。
リライトモジュールの構成
前述したように、Rewriteモジュールを構成します。 .htaccess
ファイル。
ディレクトリをDocumentRootに変更します。この場合は、 /var/www/html
:
- cd /var/www/html
開催中 .htaccess
編集用:
- sudo vi .htaccess
もちろん、以前にファイルを作成したことがない場合は、空白になります。 リダイレクトする方向に応じて、次のいずれかのオプションを使用します。
オプション1:wwwをwww以外にリダイレクトする
ユーザーをwwwからwww以外のプレーンなドメインにリダイレクトする場合は、次の構成を挿入します。
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
保存して終了。 変更はすぐに有効になります。 HTTPSを使用している場合は、「http」を更新する必要があることに注意してください。 RewriteRule
行、「https」へ。
このcurlコマンドを使用して、www以外のドメインがwwwドメインにリダイレクトされるようにします(強調表示された部分を実際のドメインに置き換えます)。
curl -I http://www.example.com
あなたは 301 Moved Permanently
次のように、www以外のリダイレクト場所を示す応答。
Output:HTTP/1.1 301 Moved Permanently
Date: Mon, 04 May 2015 16:04:56 GMT
Server: Apache/2.4.6 (CentOS)
Location: http://example.com/
Content-Type: text/html; charset=iso-8859-1
もちろん、確実にWebブラウザ(wwwおよび非www)でドメインにアクセスする必要があります。
オプション2:www以外をwwwにリダイレクトする
www以外のプレーンなドメインからwwwドメインにユーザーをリダイレクトする場合は、次の構成を挿入します。
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
保存して終了。 変更はすぐに有効になります。 HTTPSを使用している場合は、「http」を更新する必要があることに注意してください。 RewriteRule
行、「https」へ。
このcurlコマンドを使用して、www以外のドメインがwwwドメインにリダイレクトされるようにします(強調表示された部分を実際のドメインに置き換えます)。
curl -I http://example.com
あなたは 301 Moved Permanently
次のように、wwwリダイレクトの場所を示す応答。
Output:HTTP/1.1 301 Moved Permanently
Date: Mon, 04 May 2015 16:05:26 GMT
Server: Apache/2.4.6 (CentOS)
Location: http://www.example.com/
Content-Type: text/html; charset=iso-8859-1
もちろん、確実にWebブラウザ(wwwおよび非www)でドメインにアクセスする必要があります。
結論
それでおしまい! これで、Apacheリダイレクトが適切に構成され、ユーザーはwww以外のドメインとwwwドメインを介してWebサーバーにアクセスできるようになります。
リダイレクトの実装に使用したApache機能であるmod_rewriteについて詳しく知りたい場合は、このチュートリアルMod_Rewriteの設定方法をお読みください。