2017-12-03 7 views
3

ドメイン名のwwwバージョンのSSL証明書付きのHerokuにPHPアプリケーションがあります。私はhttps経由で行くために(wwwとnon-wwwの両方への)すべてのリクエストを必要とし、その影響に.htaccessを追加しました。しかし、ユーザーがhttpバージョンにアクセスする可能性があり、その理由を理解できない状況がまだあります。Heroku PHPアプリケーションでwwwとnon-wwwバージョンの両方にhttpsを使用するようにします

RewriteEngine on 

RewriteCond %{HTTPS}::%{HTTP_HOST} ^off::(?:www\.)?(.+)$ 
RewriteRule^https://www.%1%{REQUEST_URI} [NE,L,R] 

私の理解では、これがhttps://www経由でアクセスするために、すべてのユーザーを強制すべきであるということですが、それは常に発生しません:

は、ここに私の.htaccessです。たとえば、Googleで時々httpsの検索結果が表示されず、代わりにリンクが安全でないhttpと表示されます。

私が間違っていることについてのアイデアはありますか?

+0

これは[LINK](https://stackoverflow.com/questions/26489519/how-to-redirect-to-https-with-htaccess-on-heroku-cedar-stack)に役立つかもしれません –

+0

ありがとう、ちょうどそれを試してみてください。残念ながら、私のサイトにhttpを使うように強制することはまだ可能です。 – Rob

答えて

2

http:// wwwとwww以外のバージョンの代わりにhttps要求を使用するかどうかを教えてください。次のルールは、ユーザーをこのようなものにリダイレクトします。

https://www.example.com/

RewriteEngine On 

RewriteCond %{HTTP_HOST} !^www\. [NC,OR] 
RewriteCond %{HTTPS} !on 
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] 
RewriteRule^https://www.%1%{REQUEST_URI} [R=301,L,NE] 

これはあなたが

3

が最初www.にリダイレクトし、その後、:443に同じホスト名にリダイレクトしたかったものを達成するために役立つことを願っています。通常www.はDNSのエイリアスに過ぎませんが、ほとんどの場合、ウェブサイトにはwww以外の短いホスト名が使用されます。証明書を拡張する必要があるかもしれません。なぜなら、ワイルドカード化されていない限り、明示的に両方のホスト名を追加する必要があるからです。

# rewrite to HTTPS 
RewriteCond %{HTTPS} off 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

あなたがwww.(または任意の証明書は述べている)にすべてを書き換えたい場合は、すぐ下に別のルールを追加します。最初のアクセスでは、非SSLルール[L]が最後のステップであり、次のアクセスでSSLルール[L]が書き換えの最後のステップです。

# rewrite to www. 
RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

も強制SSLで robots.txtについて、この答え hereを参照してください。

"まだHTTPを使用することができます" ... .htaccessファイルの別の場所を検討するか、リダイレクトするだけのホスト名ごとにディレクトリを作成してください。

+0

@MartinZeitlerに感謝します。私はそれを '.htaccess'に追加しましたが、リダイレクトせずにhttpバージョンのサイトにアクセスすることは可能です。 '.htaccess'を別の場所に移動すると言います。これは 'procfile'と' composer.json'の横にあるルートフォルダにあります。 – Rob

関連する問題