2017-06-18 5 views
0

私は自分のサイトのSSL証明書を購入したばかりで、HTTPSを強制しようとしています。それはちょっとうまくいくが実際にはない。私はカスタムルーティングのためにPHP Slimフレームワークを使用しているApacheにいます。Apacheで奇妙な結果が出るように強制する

マイフォルダ構造体

root/ 
    .htaccess (A) 
    php/ 
    public_html/ 
    .htaccess (B) 

.htaccessの私のメインのhtaccessファイルは、私がexample.comに行くとき

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] 

はそれが安全なページに行くこれらのルールを持っている

(A) 。すばらしいです!私はhttp://www.example.com/loginに行けば、

の代わりにリダイレクト:

の.htaccess(B)

マイpublic_htmlのファイルは、これらのルール

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    #RewriteBase/
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule . index.php [QSA,L] 
</IfModule> 


# Always use https for secure connections 
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] 

問題を持っていますhttps://www.example.com/login,

は、それが上から下までの検証を取得htaccessファイル - ファイルにhttps://www.example.com/index.php

+0

これは、あなたのhtaccessに複数のルールセットがあるためです。 ''の最初のルールは、要求されたファイルが存在するかどうかをチェックし、存在しない場合は 'index.php'にリダイレクトします。 '/ login'はおそらく実際のファイルとして存在しないので、そのルールがトリガされます。他のルールよりも前にhttps-check _を移動するだけです。 –

+0

ありがとう!非常に簡単 – jozenbasin

+0

答えとして追加しましたので、それを受け入れて質問を閉じることができます。 –

答えて

2

ルールにリダイレクトします。 htaccessでは、要求されたリソース(/ login)がサーバー上に存在するかどうかをまずチェックします。そうでなければ、要求をindex.phpにリダイレクトします。

他のルールのの前にhttps-check/redirect を移動しただけで動作するはずです。

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    #RewriteBase/

    # Always use https for secure connections 
    RewriteCond %{SERVER_PORT} 80 
    RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] 

    # Redirect requests to non existing resources to index.php 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule . index.php [QSA,L] 
</IfModule> 

また、第2のRewriteEngine Onも削除しました。一度それがあれば十分です。

関連する問題