2016-11-03 21 views
1

私のLaravelアプリケーション用にhttpからhttpsへ自動的にリダイレクトしたいと思います。Laravel httpからhttpsへの自動リダイレクトURL

URLがapp1.domain.com

である私は、パブリックフォルダ内の.htaccessファイルに次の行を追加しましたが、それを有効にするようではありません。私はhttp://app1.domain.comを入力すると

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

、URLがリダイレクトされ、httpにとどまるされていません。 http://app1.domain.com/auth/loginで自分のアプリにアクセスすると、404が表示されます。httpshttps://app1.domain.com/auth/loginに手動で追加すると機能しますが、自動的にhttpsにリダイレクトすることができます。

<IfModule mod_rewrite.c> 
<IfModule mod_negotiation.c> 
    Options -MultiViews 
</IfModule> 

RewriteEngine On 

# Redirect Trailing Slashes... 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

# Handle Front Controller... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [L] 

# Added those 2 lines for ssl redirect 
RewriteCond %{HTTPS} off 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

</IfModule> 

の.htaccessはまたAPP_URL=http://app1.domain.comからAPP_URL=https://app1.domain.comに私のlaravel .envファイルを変更しようとしたが、何もしませんでした。 HTTPSへのすべてのHTTP要求をリダイレクトする

SOLUTION

使用するWebサーバー。 service httpd restart

に任意のアイデアを忘れないでください

<VirtualHost *:80> 
    ServerName www.app1.domain.com 
    ServerAlias app1.domain.com 
    Redirect permanent/https://app1.domain.com/ <-- this line added 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/html/app1.domain.com/public 
</VirtualHost> 

:?に

<VirtualHost *:80> 
    ServerName www.app1.domain.com 
    ServerAlias app1.domain.com 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/html/app1.domain.com/public 
</VirtualHost> 

だから、私からhttpd.confファイルを変更しましたかありがとう

+0

どこでホストされていますか、それはnginxを使用していないのですか? –

+0

vpsでホストされ、Apacheを使用しています – user3489502

+0

OK、あなたは 'RewriteEngine on'ですか? – schellingerht

答えて

2

私はミドルウェア機能を使用し、それをすべてのルートに適用します。あなたは、特定のURLに対して

namespace App\Http\Middleware; 

use Closure; 

class HttpsProtocol { 

public function handle($request, Closure $next) 
{ 
     if (!$request->secure() && env('APP_ENV') === 'production') { 
      return redirect()->secure($request->getRequestUri(), 301); 
     } 

     return $next($request); 
    } 
} 

は、あなたのkernel.phpファイルに追加する必要があるなら、あなたはそれを取ることができ

'https' => [ 
     'App\Http\Middleware\HttpsProtocol' 
    ], 

そしてちょうどこの

Route::get('/', ['middleware' => array('web','https'),'uses' => '[email protected]']); 
のようなあなたのルートにに、このタック

または

Docs

グローバルに登録
+1

Laravelの外でこれを行う方がよいでしょうか?あなたが.htaccessファイルを使ってあなたのために働いていなかったのでこれをしましたか? – user3489502

+0

私は実際にhtaccessをすべてのケースで確実に動作させるのに問題がありました。あなたはhtaccessがよりきれいだと主張するかもしれませんが、彼らはリクエストをリダイレクトしています。そして、laravelの中でそれを行うことで、必要に応じて後で拡張することができます。いずれにせよ、どちらかといえば議論があると確信しています。しかし、これは動作し、より簡単で拡張性があります。 – Severian

+0

あなたのご意見ありがとう@severian、本当にありがとうございます。私はOK(httpsにすべてのhttp要求をリダイレクトするためにWebサーバーを使用して)うまくいくように見えるソリューションを見つけました。上記の解決策を参照 – user3489502

0

はあなたの.htaccessファイルそれは私のために働い

RewriteEngine On 

# Redirect to https 
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] 

でこれを入れてください。

関連する問題