最近、ウェブサイトの.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>
タグを使用しませんでした。大丈夫ですか、それらの開始タグと終了タグを追加して、もう一度追加する必要がありますか?
その後、.htaccessコードを編集しようとしたときに、以前に追加したルールはありませんでした。しかし、リダイレクトはまだ正常に機能していました。
301リダイレクトはブラウザーによってハードキャッシュされるため、リダイレクトが.htaccess
ファイルにない場合(またはサーバー構成に移動した場合)、キャッシュされた応答が表示される可能性が高くなります。ブラウザのキャッシュをクリアして再テストします。
ドメインでHTTP Strict Transport Security(HSTS)が有効になっていますか? 「はい」の場合、最初のHTTPS要求の後、browserは常に(または指定された期間の間)HTTPSバージョンを自動的に要求します。また、これはリダイレクトディレクティブを必要としません(最初のリクエストの後)が、HTTPSバージョンに最初にアクセスするまで、新しいユーザーはリダイレクトされません。
サーバー側コード(CMS/WordPress?)がこの正規化を実行し、正規URLにリダイレクトしている可能性もあります。結局のところ、サイトのコードのどこかにredirectへの「リダイレクト」が必要です。これは魔法では起こりません。
- これは正常ですか?
.htaccess
から「消える」指令は正常ではありません。 CMS(たとえば、WordPress ??)の更新によってこれらが上書きされる可能性はありますが。 (?)
- コードを追加するときに
<IfModule mod_rewrite.c>
タグを使用しませんでした。大丈夫ですか、それらの開始タグと終了タグを追加して、もう一度追加する必要がありますか?
<IfModule>
ラッパーは必要ありません。実際、それを持たない方がおそらく良いでしょう。 <IfModule mod_rewrite.c>
ラッパーは、サイトがmod_rewriteなしで「通常」機能する場合、またはmod_rewriteに依存する他のモジュールがある場合にのみ必要です。
WordPressを使用している場合は、WordPressが<IfModule>
ラッパーを使用することに注意してください。これは、互換性を最大限に高めるように設計されており、mod_rewriteをインストールしなくても機能します。ただし、mod_rewiteが利用できない場合、URLフォーマット機能が失われます。
- リダイレクトを行うより良い方法があれば...
このリダイレクトは適切に見えます 。変更する唯一の理由は、機能していない場合です。 (たとえば、別のポートまたは何かからHTTPの提供を開始しましたか?)唯一の改善は、代わりにサーバー構成を使用し、.htaccess
を無効にすることです。
これを試して、それが役立つかどうかを確認してください。
RewriteCond %{HTTP_Host} ^yourdomain\.com$ [OR]
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R=301,L]