【wwwなしに統一】さくらサーバーでの.htaccessの記述について

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 3,417

Zoohomi

score 12

さくらインターネットのサーバーにて、常時SSLを設定しております。
今回行いたいことは、
・wwwを含むURLの場合は、無しのURLにリダイレクトする。
・httpsではないページ(http)がリクエストされた場合、httpsのページにリダイレクトする。
の二点です。

さくらの方の設定は、
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
マルチドメインとして使用する(推奨)
マルチドメインを選ぶとドメイン名でアクセスしたとき、指定したフォルダを既定のフォルダとして表示します。同時にwww.が付与されたサブドメインも利用できます。
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
を設定しています。

以下に.htaccessの内容を添付致しますが、この記述では

成功点:「http://example.com」や、「example.com」へアクセス⇒「https://example.com」にリダイレクト成功
失敗点:「http://www.example.com」や、「www.example.com」へアクセス⇒「https://www.example.com」にリダイレクトされる。※httpsにはなるが、wwwを除いたURLになっていない。

となります。
sslページへのリダイレクトと、wwwの除去を同時に行うにはどう記述すればよいでしょうか?
※関係があるといけないので、一応実際の.htaccessに記述されている、basic認証の処理とhtml拡張子でphpファイルを動かす処理も書いておきます。

Action myphp-script /php.cgi
AddHandler myphp-script .php .html
<Files ~ "^\.(htaccess|htpassword)$">
deny from all
</Files>
AuthUserFile /home/example/www/.htpassword
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
order deny,allow
<Files ~ (index.php|example.php)>
require valid-user
</Files>

########以下が該当処理#########
<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{ENV:HTTPS} !^on$
RewriteCond %{HTTP:X-SAKURA-FORWARDED-FOR} ^$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} ^(www\.example\.com)(:80)?
RewriteRule ^(.*) https://example.com/$1 [R=301,L]
</IfModule>

宜しくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • asahina1979

    2017/08/29 08:29

    ドキュメントルートからして(サクラのレンタルサーバー) だとはおもいますが、どうでしょう?

    キャンセル

回答 2

+1

一番無難で簡単な方法は

www有りをサブディレクトリに対応させて全てのリクエストをリダイレクトさせる

まあ、https変換はドメイン変換の後に書いてくれれば動くと思いますが

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{ENV:HTTPS} !^on$
RewriteCond %{HTTP_HOST} ^(www\.example\.com)(:80)?
RewriteRule ^(.*) https://example.com/$1 [R=301,L]
RewriteCond %{HTTP:X-SAKURA-FORWARDED-FOR} ^$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

(「マルチドメインとして使用する(推奨)」と記載されているので、さくらのレンタルサーバと判断して回答しています。)

さくらのレンタルサーバで、「マルチドメインとして使用する」の場合は、HTTPS 接続時は、アクセスされたURLが、https://example.com/ でも https://www.example.com/ でも HTTP_HOST は、example.com が返ってきますので、.htaccess 内では、HTTP_HOST で、どちらのホスト名でアクセスされているか判断ができません。

そのため、下記の部分は、https://www.example.com/ の場合は、条件が成立しません。

RewriteCond %{HTTP_HOST} ^(www\.example\.com)(:80)?
RewriteRule ^(.*) https://example.com/$1 [R=301,L]

(1年位前に確認済み。現在の状況は、この設定のサーバが無いので、確認できていません。)


対処方法としては、「wwwを付与せずマルチドメインとして使用する(上級者向け)」に設定して、「www無し」と「www付き」を別々のフォルダに分けて、2つのマルチドメインを作成することになります。
この場合は、以下の記述で対処可能です。

example.com 側フォルダの .htaccess
http の場合のみ https://example.com/ に 301リダイレクト

RewriteEngine On
RewriteCond %{ENV:HTTPS} !^on$
RewriteCond %{HTTP:X-SAKURA-FORWARDED-FOR} ^$
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

www.example.com 側フォルダの .htaccess
すべてを https://example.com/ に 301リダイレクト

RewriteEngine On
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる