web-dev-qa-db-ja.com

サイトをWWWおよびHTTPSに適切にリダイレクトする

最近、ウェブサイトの.htaccessファイルで問題を発見しました。サイトを開始したときに、301リダイレクトを行って、すべての非wwwおよびhttpリクエストをhttpsでwwwにリダイレクトしました。このコード行を追加しましたが、非常にうまく機能しました。

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

また、URLの4つのバリエーションすべてをGoogleウェブマスターツールに送信しました。検索エンジンの結果でも https:// www を使用していることがわかりました。その後、.htaccessコードを編集しようとしたときに、以前に追加したルールはありませんでした。しかし、リダイレクトはまだ正常に機能していました。

これは正常ですか?コードを追加するときに<IfModule mod_rewrite.c>タグを使用しませんでした。大丈夫ですか、それらの開始タグと終了タグを追加して、もう一度追加する必要がありますか?

5
Anjana Nilupul

その後、.htaccessコードを編集しようとしたときに、以前に追加したルールはありませんでした。しかし、リダイレクトはまだ正常に機能していました。

301リダイレクトはブラウザーによってハードキャッシュされるため、リダイレクトが.htaccessファイルにない場合(またはサーバー構成に移動した場合)、キャッシュされた応答が表示される可能性が高くなります。ブラウザのキャッシュをクリアして再テストします。

ドメインでHTTP Strict Transport Security(HSTS)が有効になっていますか? 「はい」の場合、最初のHTTPS要求の後、browserは常に(または指定された期間の間)HTTPSバージョンを自動的に要求します。また、これはリダイレクトディレクティブを必要としません(最初のリクエストの後)が、HTTPSバージョンに最初にアクセスするまで、新しいユーザーはリダイレクトされません。

サーバー側コード(CMS/WordPress?)がこの正規化を実行し、正規URLにリダイレクトしている可能性もあります。結局のところ、サイトのコードのどこかにredirectへの「リダイレクト」が必要です。これは魔法では起こりません。

  1. これは正常ですか?

.htaccessから「消える」指令は正常ではありません。 CMS(たとえば、WordPress ??)の更新によってこれらが上書きされる可能性はありますが。 (?)

  1. コードを追加するときに<IfModule mod_rewrite.c>タグを使用しませんでした。大丈夫ですか、それらの開始タグと終了タグを追加して、もう一度追加する必要がありますか?

<IfModule>ラッパーは必要ありません。実際、それを持たない方がおそらく良いでしょう。 <IfModule mod_rewrite.c>ラッパーは、サイトがmod_rewriteなしで「通常」機能する場合、またはmod_rewriteに依存する他のモジュールがある場合にのみ必要です。

WordPressを使用している場合は、WordPressが<IfModule>ラッパーを使用することに注意してください。これは、互換性を最大限に高めるように設計されており、mod_rewriteをインストールしなくても機能します。ただし、mod_rewiteが利用できない場合、URLフォーマット機能が失われます。

  1. リダイレクトを行うより良い方法があれば...

このリダイレクトは適切に見えます 。変更する唯一の理由は、機能していない場合です。 (たとえば、別のポートまたは何かからHTTPの提供を開始しましたか?)唯一の改善は、代わりにサーバー構成を使用し、.htaccessを無効にすることです。

2
MrWhite

これを試して、それが役立つかどうかを確認してください。

RewriteCond %{HTTP_Host} ^yourdomain\.com$ [OR]

RewriteCond %{HTTPS} !on

RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R=301,L]
0
Chaoley