web-dev-qa-db-ja.com

Apache Rewrite Rule non-www to www + http to https +末尾のスラッシュを削除

以下を達成したいと思います。

  • www以外をwwwに書き換える
  • httpからhttpsにリダイレクトする
  • 末尾のスラッシュを削除

例えば http://example.co.uk にリダイレクトする必要があります https://www.example.co.uk

上記のすべてを行うために、一連のルールをどのように構成しますか?

4
DD.

最初の2回の書き換え(非www→www、http→https)では、次のルールが機能するはずです。

RewriteEngine On

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_Host} !=www.example.com [NC]
RewriteRule ^(.*) https://www.example.com/$1 [NS,L,R=permanent]

www.example.comをサイトの実際の正規ホスト名に置き換えるだけです。

3番目の点については、 空のパスを持つURLの末尾のスラッシュを追加または削除する必要はありません 。このようなURLは、標準に準拠するすべてのHTTPクライアント(ブラウザーおよび検索エンジンを含む) )。

追伸サイトが常にHTTPS経由でアクセスされるようにする場合は、おそらく HTTP Strict Transport Security header を送信するようにWebサーバーを構成することもできます。たとえば、Apacheでは、次のディレクティブを使用してそれを行うことができます(ほとんどの場合、リンクされたWikipediaの記事からコピーされます)。

<If "-T %{HTTPS} && %{HTTP_Host} = 'www.example.com'">
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</If>
9
Ilmari Karonen

HTACCESSを使用したHTTPSを使用したWWWへの非WWW URL:

次のコードを.htaccessファイルに追加し、Webサイトのルートディレクトリで見つけることができます。見つからない場合は、テキストエディターでこれをコピーして.htaccessとして保存し、アップロードします。

追伸: 続行する前に、必ず.HTACCESSファイルをバックアップしてください。誤ったコードは500エラーにつながる可能性があります。


RewriteCond %{HTTPS} on
RewriteCond %{HTTP_Host} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_Host}/$1 [R=301,L]

末尾のスラッシュを削除

末尾のスラッシュをオフにするときは注意してください。ホストでmod_dirが有効になっている場合は、デフォルトで有効になっているディレクトリスラッシュを必ずオフにしてください。このディレクティブは、設定したルールに関係なく、ディレクトリの末尾にスラッシュを追加します。これを無効にするには、これをhtaccessファイルの先頭に追加します:

DirectorySlash Off

ブラウザとサーバーでさえ、デフォルトでディレクトリに末尾のスラッシュを追加します。それには理由があります。ただし、末尾のスラッシュを削除する必要がある場合は、次のようにします。


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)$
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
0
Ipsita