2017-06-12 16 views
1

http://example.com/testhttps://example.com/testにリダイレクトできません。それは常にホームページにリダイレクトされます。私は解決策なしでGoogleで何時間も検索しました。以下は私の.htaccessです:htaccessでhttpをhttpsに強制すると、常にホームページにリダイレクトされます

# RewriteCond %{REQUEST_FILENAME} !-f 
# RewriteCond %{REQUEST_FILENAME} !-d 
# RewriteCond %{REQUEST_URI} !=/favicon.ico 
# RewriteRule^index.php [L] 

しかし、それは私のサイトのために別の問題が発生します。

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule^- [E=protossl] 
    RewriteCond %{HTTPS} on 
    RewriteRule^- [E=protossl:s] 
    RewriteRule^- [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 
    RewriteRule "(^|/)\." - [F] 
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
    RewriteRule^http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301] 
    RewriteBase/
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_URI} !=/favicon.ico 
    RewriteRule^index.php [L] 
    <IfModule mod_headers.c> 
    RewriteCond %{HTTP:Accept-encoding} gzip 
    RewriteCond %{REQUEST_FILENAME}\.gz -s 
    RewriteRule ^(.*)\.css $1\.css\.gz [QSA] 
    RewriteCond %{HTTP:Accept-encoding} gzip 
    RewriteCond %{REQUEST_FILENAME}\.gz -s 
    RewriteRule ^(.*)\.js $1\.js\.gz [QSA] 
    RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1] 
    RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1] 

    <FilesMatch "(\.js\.gz|\.css\.gz)$"> 
     Header set Content-Encoding gzip 
     Header append Vary Accept-Encoding 
    </FilesMatch> 
    </IfModule> 
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 
    RewriteCond %{HTTPS} !on 
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 
</IfModule> 

<IfModule mod_headers.c> 
    Header always set X-Content-Type-Options nosniff 
</IfModule> 

私は何とかコメントアウトによって、私が欲しいものを達成するために管理しました。 404エラーが発生し、バックエンドシステムにアクセスするとサイトが壊れます。誰かが私を正しい方向に向けることができますか? HTTPSへ

答えて

0
RewriteCond %{HTTPS} !on 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

あなたのHTTP間違った場所にあるリダイレクト。これは、ファイルの最後ではなく、ファイルの先頭に移動する必要があります。フロントコントローラーの後にこのリダイレクトを置くことで(コメントアウトしたコードのビット)実際にindex.phpにリダイレクトされます。

また、永続的な(301)リダイレクト(これが正常に機能していることを確認したら)。また、Lフラグが必要で、REQUEST_URIサーバー変数を使用している場合は、RewriteRuleパターンをキャプチャする必要はありません。だから、これは代わりに、次のように記述する必要があります。

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

UPDATE:実際には

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

、両方のこれらのディレクティブは、ファイルの先頭に行く必要があります。最初のRewriteRulehttpではなくhttpsにリダイレクトする必要があります。そうしないと、追加の不要なリダイレクトが発生します。

+0

サイトをhttpsにリダイレクトしませんでした。今度はすべてのcss、js、およびimgがステータス404で読み込まれません。 –

+0

CSS、JS、およびイメージのエラーは、クライアント側のHTMLの相対URLを示します。しかし、あなたが_frontコントローラ_をコメントアウトしたときにリダイレクトされた場合、リダイレクトされないという明白な理由はありません。 SSLはどのように管理されていますか?私は自分の答えを更新しました - 正規のwwwからnon-wwwへのリダイレクトはファイルの先頭にもなければならないことに注意してください。更新された '.htaccess'ファイルをあなたの質問に投稿してください。 – MrWhite

+0

私は別のdrupalモジュール(seckit)を使用してこれを解決することができます。ご協力いただきありがとうございます。 –

関連する問題