ドメイン名をwwwありか、wwwなしで統一したいことがありますよね
今回はロリポップ(スタンダード)を使ってハマったお話です。
ちなみに、これはロリポップに限った話ではなく、ワードプレス全般の話です。
最初に正解を書いておきます。
ワードプレス wwwありなしの統一設定の正解はこれ!
ワードプレスを使ったサイトでは、.htaccessではなく、
wp-adminで設定>一般 WordPress アドレス (URL)にwwwを指定する
サイトアドレス (URL)も合わせて修正してください。
こんな簡単なことなんです、でも忘れたりしていると30分ぐらいハマります・・・
よくありがちな間違い
価格が安かったお名前COMで独自ドメインを取得して、
ロリポップで利用する設定をしました。
ここでは、例として、example.comというドメイン名にしています。
今回はワードプレスを使ったサイトにしようと「簡単インストール」で
さくさく!っと最新ワードプレス4.5.3をインストールしました。
インストール時に指定したドメインは、wwwなしの、example.comです。
「wwwあり」、www.example.comに統一するために、sshでログインして、.htaccessファイルを編集します。
BEGIN WordPressの前に以下のような感じで、
wwwが付いてなかったら、wwwをつけてリダイレクトするっていう設定を行います。
==========.htaccess ======Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^(example\.com)(:80)? [NC] RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] # BEGIN WordPressRewriteEngine On RewriteBase / ・・・ ==========.htaccess ======
で、これでアクセスすると
chrome
www.example.com ページは機能していません
www.example.com でリダイレクトが繰り返し行われました。
アクセスできない状況に陥ります。
でも、これってネットでhtacess www統一などのキーワードで探すと見つかる一般的な設定です
よくありがちなhtaccessの間違い www統一設定をデバッグする
RewriteLog フルパス
RewriteLogLevel 99
などで、mod_rewriteの挙動をログファイルに出力することができます。
この設定は、htaccessに指定します。
でも、一般的なレンタルサーバー、ここではロリポップでは指定できない項目になります。
(サーバー側のエラーになります)
「リダイレクトが繰り返し行われました。」とかのエラーが発生している場合は、
少なくともhtaccessに指定した内容を理解できていることになります。
このエラーは、クライアント側(自分のPC側)で判断された内容です。
ログファイルが使えない場合、有効なデバッグ方法の一つとして直接httpアクセスしてみる方法があります。
そのコマンドは、curlです。
-vオプションを指定すると詳細な挙動を確認できます。
% curl -v example.com ↓↓↓↓↓↓ リクエスト * Rebuilt URL to: example.com/ * Trying 157.7.999.999... * Connected to example.com(157.7.999.999) port 80 (#0) > GET / HTTP/1.1 > Host: example.com > User-Agent: curl/7.43.0 > Accept: */* ↑↑↑↑↑↑ リクエスト ↓↓↓↓↓↓ レスポンス > < HTTP/1.1 301 Moved Permanently < Date: Thu, 21 Jul 2016 08:02:23 GMT < Server: Apache < Location: http://www.example.com/ < Content-Length: 240 < Content-Type: text/html; charset=iso-8859-1 < ↑↑↑↑↑↑ レスポンス ↓↓↓↓↓↓ レスポンスボディ <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>301 Moved Permanently</title> </head><body> <h1>Moved Permanently</h1> <p>The document has moved <a href="http://www.example.com/">here</a>.</p> </body></html> ↑↑↑↑↑↑ レスポンスボディ
簡単に説明すると、リクエスト、レスポンス、レスポンスボディの3つの情報がわかります。
example.comにアクセス(リクエスト)、
その結果HTTP/1.1 301 Moved Permanently、301 リダイレクトで、移動先(location)はwww.example.comになります。
locationで移動してくれないブラウザのために、hereリンクのHTMLを出力してくれていることがわかります。
ここまでの動作は、予定通り、正しい流れですよね。
次に、リダイレクト先のwww.example.comで確認してみます。
% curl -v www.example.com * Rebuilt URL to: www.example.com/ * Trying 157.7.999.999... * Connected to www.example.com (157.7.999.999) port 80 (#0) > GET / HTTP/1.1 > Host: www.example.com > User-Agent: curl/7.43.0 > Accept: */* > < HTTP/1.1 301 Moved Permanently < Date: Thu, 21 Jul 2016 08:03:22 GMT < Server: Apache < X-Powered-By: PHP/5.6.21 < Location: http://example.com/ < Content-Length: 0 < Content-Type: text/html; charset=UTF-8 < * Connection #0 to host www.example.com left intact
www.example.comにアクセスすると、example.comに移動しましたっていう結果になります。
「リダイレクトが繰り返し行われました。」本当に起きています。
example.com => www.example.com =>example.com =>・・・・
という感じで繰り返されていることがわかりました。
まとめ
正解は、htaccessに指定してはいけなかったです。
ワードプレスサイトでは、
wp-adminで設定>一般 WordPress アドレス (URL)にwwwを指定する
が正解です。htaccessで指定する必要はありません。
今回使っているサーバーは、ロリポップスタンダードです。
月額500円でsshログインもできちゃうサーバーなので、bash使える方は簡単に設定できます。
月額500円より安いライトプランでもワードプレスが使えます。
MySQLが1つしか使えなくても、ワードプレスは1つのMySQLに複数インストールできちゃいます。
マルチドメイン50個まで対応しているので、最大50個のサイトも作れますよ。
ライトプランはsshが使えません、またphpが高速に動くモジュール版も使えません。
もうちょい速いの!って思ったらスタンダードが鉄板だと思います。
コメント