12

SEO の目的でいくつかの厳しい要件があるサイトがあります。

主なものは、すべての http リクエストを https にリダイレクトすることです。これは、これを AppController に追加することによって行いました。

public function forceSSL() {
    return $this->redirect('https://' . env('SERVER_NAME') . $this->here);
}

public function beforeFilter() {
    $this->Security->blackHoleCallback = 'forceSSL';
    $this->Security->requireSecure();
}

問題は 404 ページで、https にリダイレクトされません (例: www.hublink.net/asdfg)

また、これらの 2 行を (別の投稿から) .htaccess ファイルに追加し、上記のコードを削除しましたが、「リダイレクト ループ」エラーが発生します。

RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
4

6 に答える 6

21
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=301,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

https://wiki.apache.org/httpd/RewriteHTTPToHTTPSを参照 してください。

于 2015-02-07T19:58:40.360 に答える
5

そのため、リダイレクト ループやエラーを発生させることなく、サイト全体を強制的に https にする良い方法を見つけることができませんでした。これは、そのページの個々のコントローラーを変更すると、ページ レベルでも機能します)。とにかく、これは私が数日間これをいじった後、最終的にやったことです.

AppController.php のコントローラー フォルダー内に、次のコードを直接配置しました。

パブリック関数 beforeFilter() {

=================================

 // Force to SSL
 $this->request->addDetector('ssl', array(
    'env' => 'HTTP_X_FORWARDED_PROTO',
    'value' => 'https'
));
if($_SERVER['HTTP_X_FORWARDED_PROTO'] == "http") {  return $this->redirect('https://' . env('SERVER_NAME') . $this->here); }

これが行うことは、最初にそれが http か https かをチェックすることです。http の場合は、ページを https バージョンにリダイレクトします。これを AppController.php コントローラに入れることで ... これでサイト全体が保護されます。

これが苦労している他の誰かに役立つことを願っています。

于 2015-04-09T02:17:53.767 に答える
1

#SERVER-HTTPS-ON# (on) が表示された場合は、追加します

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

#SERVER-HTTPS-ON# (1) が表示された場合は、追加します

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} !=1
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

#SERVERPORT443# が表示された場合は、追加します

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

#LOADBALANCER# が表示されている場合は、追加します

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

#CDN# が表示されている場合は、追加してください

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-SSL} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

#Cloudflare# が表示された場合は、追加してください

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP:CF-Visitor} ‘”scheme”:”http”‘
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

#ENVHTTPS# が表示された場合は、追加します

<IfModule mod_rewrite.c>
RewriteEngine on   RewriteCond %{ENV:HTTPS} !=on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

SSL テスト ページの下部に、HTTP HOST が表示されます。これはドメインと同じである必要があります。そうでない場合は、リダイレクトの問題を防ぐために、次のようにドメインをハードコーディングする必要がある場合があります。

RewriteEngine on
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*)$ full_url_with_https/$1 [R=301,L]

詳細はこちら

于 2017-08-31T06:31:06.313 に答える