httpからhttpsへのApacheリダイレクト


157

Apacheを備えた環境 Centos

httpからhttpsへの自動リダイレクトを設定しようとしています

From manage.mydomain.com --- To ---> https://manage.mydomain.com 

以下を私のhttpd.confに追加しようとしましたが、うまくいきませんでした

 RewriteEngine on
    ReWriteCond %{SERVER_PORT} !^443$
    RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]

何か案は?

回答:


210

私は実際にこの例に従って、それは私のために働いた:)

NameVirtualHost *:80
<VirtualHost *:80>
   ServerName mysite.example.com
   Redirect permanent / https://mysite.example.com/
</VirtualHost>

<VirtualHost _default_:443>
   ServerName mysite.example.com
  DocumentRoot /usr/local/apache2/htdocs
  SSLEngine On
 # etc...
</VirtualHost>

次に行います:

/etc/init.d/httpd restart


7
これは、VirtualHostファイルにアクセスできる場合にのみ使用できることに注意してください。推奨される方法です。
foochow 2013

4
httpd.confでこれを変更した後、Apache Webサーバーを再起動します。これにより、ブラウザのキャッシュも反映され、クリアされます。
スリヤンSuresh 2013年

2
この方法はUbuntu 12.4では機能しなかったと報告しますが、提案されたRewriteEngineの回答でうまくいきました。
Deano 14

2
再起動する必要がありますか?リロードはそれほど破壊的ではなく、新しい設定ファイルを取り込みます。/etc/init.d/httpd reload|| service httpd reload
Rebecca Dessonville 2016年

3
目的はsslモードにリダイレクトすることだったので、回線DocumentRoot /usr/local/apache2/htdocsは不要になりました
Abel Callejo

130
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}

http://www.sslshopper.com/apache-redirect-http-to-https.html

または

http://www.cyberciti.biz/tips/howto-apache-force-https-secure-connections.html


3
これは、PoundやBigIPなどのSSLオフローダーの背後にある場合でも機能するため、承認済みのソリューションよりも優れたソリューションです。これらのオフローダーはすべてのトラフィックを同じポートに渡すことが多く、承認されたソリューションはその特定のケースでは機能しません
spiritoo

1
@spiritooそう​​ではありません。Apacheのドキュメントでは、これはmod_rewriteを使用すべきではなく、Redirectを使用する必要がある状況の1つであると具体的に述べています:httpd.apache.org/docs/2.4/rewrite/avoid.html
Luke Madhanga '23

4
@LukeMadhanga Apache docrecommandsは、パフォーマンスのためにリダイレクトを使用しています。ただし、RewriteEngineソリューションは、私が説明した場合(オフロード)でも機能するため、より一般的な意味で優れています。私のコメントの目的は、すべてのユーザーに2つの答えから選択するキーを提供することです。一般的な手順(大軍団)を望んでいる人もいれば、パフォーマンスを望んでいる人もいます。それは自由な選択です。
spiritoo

20
ただし、これを大きくしたい場合は、この[R = 302、L、QSA]を追加して、すべてのパラメーターがセキュアページに渡されるようにします。%{REQUEST_URI} [R = 302、L、QSA]
Svetoslav Marinov

これらの行を使用し、ページをロードしようとすると、「リソースのロードに失敗しました:net :: ERR_CONNECTION_REFUSED」という応答が返されます。何が悪いのですか?
セルカン2017年

98

apache redirect http to httpsここを探して着陸しました。これは私がubuntuでやったことです:

1)モジュールを有効にする

sudo a2enmod rewrite
sudo a2enmod ssl

2)サイト構成を編集する

ファイルを編集

/etc/apache2/sites-available/000-default.conf

コンテンツは:

<VirtualHost *:80>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile    <path to your crt file>
    SSLCertificateKeyFile   <path to your private key file>

    # Rest of your site config
    # ...
</VirtualHost>

3)apache2を再起動します

sudo service apache2 restart

Ubuntu 16.04およびApache2で作業します。ありがとう!
シルベスター八尾

11

実際、あなたのトピックはhttps://serverfault.com/に属していますが、これらの.htaccessディレクティブを確認することもできます。

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*) https://%{HTTP_HOST}/$1

11

mod_rewriteの使用は、代わりに仮想ホストとリダイレクトを使用することをお勧めしません。

mod_rewriteを使用する傾向がある場合:

RewriteEngine On
# This will enable the Rewrite capabilities

RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
# This rule will redirect users from their original location, to the same 
location but using HTTPS.
# i.e.  http://www.example.com/foo/ to https://www.example.com/foo/
# The leading slash is made optional so that this will work either in
# httpd.conf or .htaccess context

リファレンス:Httpd Wiki-RewriteHTTPToHTTPS

301永久リダイレクトを探している場合、リダイレクトフラグは次のようになります。

 R=301

RewriteRuleは次のようになります。

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]

6

あなたがApache2.4を持っているならチェックしてください000-default.conf-削除DocumentRootして追加してください

Redirect permanent / https://[your-domain]/

5

サーバーのバージョン:Apache / 2.4.29(Ubuntu)

Webとapacheの公式ドキュメントで長時間検索した後、私にとって有効な唯一の解決策は/usr/share/doc/apache2/README.Debian.gzからのものでした

To enable SSL, type (as user root):

    a2ensite default-ssl
    a2enmod ssl

/etc/apache2/sites-available/000-default.confファイルに、

リダイレクト"/" " https://sub.domain.com/ "

<VirtualHost *:80>

    #ServerName www.example.com
    DocumentRoot /var/www/owncloud
    Redirect "/" "https://sub.domain.com/"

それでおしまい。


PS:解凍せずにマニュアルを読みたい場合:

gunzip -cd /usr/share/doc/apache2/README.Debian.gz

3

これは私のために働きました:

RewriteCond %{HTTPS} =off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=301]

3

このコードは私にとってはうまくいきます。

# ----------port 80----------
RewriteEngine on
# redirect http non-www to https www
RewriteCond %{HTTPS} off
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]

# redirect http www to https www
RewriteCond %{HTTPS} off
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]

# ----------port 443----------
RewriteEngine on
# redirect https non-www to https www
RewriteCond %{SERVER_NAME} !^www\.(.*)$ [NC]
RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]


2

Apache Virtualhosting構成でこれを試してから、Apacheサービスを再ロードしてください

RewriteEngine On

RewriteCond %{HTTPS} off


RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}

-1

httpは、サーバー上のデフォルトのApacheホームページからすべてのトラフィックを、サービスが提供されるものにリダイレクトするだけの簡単なものにこれを必要としましたhttps

私はまだかなりてるので、緑、それは、Apacheの設定に来るとき、私は使用を避けることを好むmod_rewrite直接、代わりにこのような単純なもののために行ってきました:

<VirtualHost *:80>
  <Location "/">
     Redirect permanent "https://%{HTTP_HOST}%{REQUEST_URI}"
  </Location>
</VirtualHost>

<VirtualHost *:443>
  DocumentRoot "/var/www/html"
  SSLEngine on
  ...
</VirtualHost>

これが好きなのは、Apache変数を使用できるため、実際のホスト名はドメイン名が関連付けられていない単なるIPアドレスなので、指定する必要がなかったからです。

参照:https : //stackoverflow.com/a/40291044/2089675

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.