web-dev-qa-db-ja.com

すべてのサブドメインをhttpからhttpsにリダイレクトします

次のコードを使用して、サブドメインのすべてのhttpリクエストをhttpsにリダイレクトします。

<VirtualHost *:80>
  ServerName subdomain.example.com
  Redirect 302 / https://subdomain.example.com
</VirtualHost>

今私の問題は、すべてのサブドメインに対してどのようにそれを行うかです。

たとえば、http:subdomain1.example.comはhttps:subdomain1.example.comに移動し、http:subdomain2.example.comはhttps:subdomain2.example.comに移動する必要があります

すべてのサブドメインに対して1つの仮想ホストを作成せずに、すべてのサブドメインに対してそれを行うにはどうすればよいですか?

更新

RedirectMatchは正規表現を使用していることがわかりました。正規表現を使用してそれを行う方法を知っている人はいますか?

17
Super Engineer

これをサーバーの.confファイルに追加できます。

<VirtualHost *:80>
  ServerName subdomain.example.com
  ServerAlias *.example.com

  RewriteEngine On
  RewriteCond %{HTTP_Host} ^(.+)\.example\.com$
  RewriteRule ^(.*)$ https://%1.example.com$1 [R=302,L]
</VirtualHost>

ServerAliasは、仮想ホストがワイルドカードとして機能することを許可します。その後、ホストヘッダーからサブドメインを抽出し、httpsへの書き換えに含めることができます。

22
arco444

.confファイルへのより簡単なユニバーサル変更は次のとおりです。

<VirtualHost *:80>
    #...whatever you already have set up...

    RewriteEngine On
    RewriteCond %{HTTP_Host} ^(.*)$ [NC]
    RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]

</VirtualHost>
9
TimmyG

RewriteHTTPToHTTPS のApache Wikiエントリが述べているように、

Mod_rewriteを使用してこれを行うことは、推奨される動作ではありません。 RedirectSSL を参照してください

HTTPからHTTPSへの強制リダイレクトのvhost構成(サブドメインでも機能します)は次のとおりです。

<VirtualHost *:80>
    ServerName example.com
    ServerAlias *.example.com

    <Location "/">
        Redirect permanent "https://%{HTTP_Host}%{REQUEST_URI}"
    </Location>
</VirtualHost>

<VirtualHost *:443>
    [...your vHost configuration...]
    SSLEngine On
    SSLCertificateFile /path/to/your/cert.pem
    SSLCertificateKeyFile /path/to/your/privkey.pem
</VirtualHost>

説明:RedirectとRedirectMatchには通常、Mod_Rewriteからの変数({HTTP_Host}など)がありませんが、<Location >を使用すると、これらの変数が割り当てられます。

Redirect permanent(代替:Redirect 301)は、http301コードでリダイレクトします。

301リダイレクトは、ユーザーをHTTPからHTTPSにアップグレードするための ベストプラクティス と見なされます。

注:この構成は、サブドメインの ワイルドカード証明書 に基づいています。

3
Mischa