web-dev-qa-db-ja.com

永続的なhttpをhttpsにリダイレクトする

システム:Ubuntu 14.04、Apache 2.4.7

http://domain.com および https://domain.com へのすべてのリクエストを https://domain.com にリダイレクトしたい=。他のいくつかのサブドメイン(tools.domain.comとphpmyadmin.domain.com)が今のところhttp経由でアクセス可能なままである一方で、「www」サブドメインへのリクエストをメインのdomain.comホストにリダイレクトしたいと思います。

これはすべて、domain.comのvirtualhost構成ファイル(/etc/Apache2/sites-available/domain.com.conf以下の完全なコンテンツ)、Apache2サービスを数回再起動しました。

http://domain.com から https://domain.com へのリダイレクトは機能します。 http://www.domain.com から https://domain.com へのリダイレクトは機能しません。 https://www.domain.com から https://domain.com へのリダイレクトは機能しません。

Virtualhostファイルの内容は次のとおりです。

<VirtualHost *:*>
    ServerName www.domain.com
    Redirect permanent / https://domain.com/
</VirtualHost>

<VirtualHost _default_:80>
    ServerName domain.com
    Redirect permanent / https://domain.com/
    LogLevel error
</VirtualHost>

<VirtualHost *:80>
    ServerName tools.domain.com
    DocumentRoot /var/www/domain.com/subdomains/tools/public
</VirtualHost>

<VirtualHost *:80>
    ServerName phpmyadmin.domain.com
    DocumentRoot /usr/share/phpmyadmin
</VirtualHost>

<VirtualHost _default_:443>
    ServerName domain.com

    DocumentRoot /var/www/domain.com/public

    <Directory /var/www/domain.com/public>
        Require all granted
    </Directory>

    # SSL CERTIFICATES
    GnuTLSEnable on
    GnuTLSExportCertificates on
    GnuTLSCacheTimeout 500
    GnuTLSCertificateFile /etc/ssl/certs/domain.com-certificate-125023.crt
    GnuTLSKeyFile         /etc/ssl/private/domain.com.key
    GnuTLSPriorities      NORMAL
</VirtualHost>

更新: https://www.domain.com のみが機能しない

愚かな私:問題はサーバーを超えていました! DNSゾーンに「www」サブドメインを設定していませんでした。私はそれを修正しました、そして今、私はほとんどそこにいます。

3
pixeline

_default_はデフォルトを意味します

このような設定で:

<VirtualHost _default_:80>
    ...
</VirtualHost>

<VirtualHost _default_:443>
    ...
</VirtualHost>

<VirtualHost *:*>        
    ...
</VirtualHost>

最後の仮想ホストは、ポート80および443で到達できません。これらのポートに対する要求は、関連する_default_仮想ホストによって処理されるためです。 *:*仮想ホストはおそらくまったく必要ありません(パブリックユーザーがより多くのポートを使用することを期待していますか?)。

実施例

したがって、すべてをhttps://example.comにリダイレクトするには、たとえば次のようにします。

<VirtualHost *:443>
    ServerName example.com

    # SSL config

    ...
</VirtualHost>

<VirtualHost *:80>
    RewriteEngine On
    RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]
</VirtualHost>

<VirtualHost *:443>

    # SSL config

    RewriteEngine On
    RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]
</VirtualHost>

リダイレクトの使用はone urlにのみ一致するため、すべてキャプチャの書き換えルールを使用していることに注意してください。

2
AD7six

Mod_rewriteを使用しようとしましたか?次のmod_rewriteルールでも同じことができます。

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