web-dev-qa-db-ja.com

httpからhttpsへのApacheリダイレクトが機能しない

次のconfファイルがあります。

file1:

NameVirtualHost  123.45.67.890:80

<VirtualHost 123.45.67.890:80>
    ServerName example.com

    RedirectPermanent / https://example.com/

#   RewriteEngine On
#   RewriteCond %{SERVER_PORT} !^443$
#   RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R]

#   SSLRequireSSL
#   Redirect permanent /secure https://example.com/

#   Redirect / https://example.com/
</VirtualHost>

コメントアウトされた行からわかるように、いくつかの方法を試しました。

file2:

NameVirtualHost 123.45.67.890:443

<VirtualHost 123.45.67.890:443>
    DocumentRoot "/opt/www/example-docroot"
    ServerName example.com
    DirectoryIndex index.html
    SSLEngine on

    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile /etc/httpd/conf.d/ssl/example.com/csr.example.2011.pem.blade
    SSLCertificateKeyFile /etc/httpd/conf.d/ssl/example.com/nokey.example.2011.pem
    SSLCACertificateFile /etc/httpd/conf.d/ssl/example.com/CA.blade.2011.csr

    <Files ~ "\.(cgi|shtml|phtml|php3?)$">
        SSLOptions +StdEnvVars
    </Files>
    <Directory "/etc/httpd/cgi-bin">
        SSLOptions +StdEnvVars
    </Directory>
</VirtualHost>

単純化のために削除されたもの、名前を変更して無実を保護しました。

サーバー/ etc/httpd/vhostsでこれらのファイルを更新します

次に実行します

apachectl restart

これは私にこれらの警告を与えます:

[warn] NameVirtualHost 123.45.67.890:80 has no VirtualHosts
[warn] NameVirtualHost 123.45.67.890:80 has no VirtualHosts

このサーバーから多数の仮想ホストが実行されています。上記の設定は整合しているようですので、これらの警告がここで適用されているとは思いません。多分間違っている。

ブラウザでデフォルトの80(http)ページを更新すると、常にデフォルトのhttpページが表示されます。

リダイレクトを機能させる方法についての提案はありますか?

3
Jahmic

多くの例が特定の構成で機能します。これは、Apacheサーバーが使用する構成に関係なく、常に機能します。

RewriteEngine On
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(/(.*))?$ https://%{HTTP_Host}/$1 [R=301,L]
15
BVB Media

私は数日前にまったく同じ問題に直面していました。動作するApache httpd.confファイルのVirtualHost設定(httpポート80に適用可能)で以下を試しました。

<Virtualhost *:80>
ServerAdmin [email protected]
ServerName site.com
ServerAlias site.com www.site.com

RedirectMatch permanent ^(.*)$ https://www.site.com$1
</Virtualhost>

これはチャームのように機能し、他の場所に構成を追加したり、追加のモジュールを追加したりする必要はありません。

11
webstat

CentOS 7のApache 2.4でも同じ問題がありましたが、RewriteEngineを使用せずに機能する修正は、httpsのVirtualHostの下のServerNameディレクティブに:44を追加することでした。

<VirtualHost 123.45.67.890:443>
DocumentRoot "/opt/www/example-docroot"
ServerName example.com:443
1

これには.htaccessを使用することをお勧めします(可能な場合)。Apache設定ファイルをいじる必要はありません。これらの行を.htaccessの先頭に追加します。

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI}
1
drcelus

私はこのリンクを今日見つけたばかりかもしれませんが、それは役立つかもしれません: http://www.serveridol.com/2012/09/24/Apache-forcing-all-url-to-https-on-www-domain/

これが私に最後に起こったとき、それはNameVirtualHost *:80/NameVirtualHost *:443および/またはListen 80/Listen 443は、Apache2のports.conf以外の場所にありました。

これは、プレス以外のすべてのページでhttpsにリダイレクトするためにVirtualHostにあるものです(httpsを提供できないビデオがあったため、httpにリダイレクトする必要がありました。そうしないと、ページが安全でないという醜い警告が表示されます):

<VirtualHost *:80>
    ServerName example.com
    RewriteEngine On

    RewriteCond %{REQUEST_URI} !^/press/.*
    RewriteRule ^.*$ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301,NC]
</VirtualHost>
0
sss