перенаправление cakephp и https


У меня есть сайт, к которому предъявляются некоторые строгие требования в целях 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]
Author: halfer, 2014-08-13

5 answers

У меня есть это в моем файле .htaccess, и он отлично работает. У меня он игнорирует локальные и промежуточные URL-адреса, как если бы у меня был http://local.example.com это не приведет к принудительному перенаправлению для этого URL-адреса. Эти строки могут быть удалены. Мне нравится использовать подход .htaccess по сравнению с подходом в AppController. Это также файл верхнего уровня .htaccess в стандартной установке CakePHP в среде общего хостинга. В обычной установке Cakephp есть три файла .htaccess.

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /

    # FORCE SSL REDIRECTION
    RewriteCond %{ENV:HTTPS} !on [NC]
    RewriteCond %{HTTP_HOST} !^local [NC]
    RewriteCond %{HTTP_HOST} !^staging [NC]
    RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

    RewriteRule ^$ app/webroot/ [L]
    RewriteRule (.*) app/webroot/$1 [L]
</IfModule>

Проверьте свой среда хостинга и убедитесь, что вам разрешено иметь файлы .htaccess. Необходимо убедиться, что ModRewrite установлен и также работает.

 8
Author: darensipes, 2014-08-13 02:28:37
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 Это сработало для меня.

 13
Author: Janckos, 2015-02-07 19:58:40

Поэтому я не смог найти хорошего способа перевести весь мой сайт на https без циклов перенаправления и ошибок. Это будет работать и на уровне страницы, если вы измените отдельный контроллер для этой страницы). в любом случае, это то, что я, наконец, сделал после того, как пару дней возился с этим.

В папке "Мои контроллеры" в AppController.php Я разместил следующий код непосредственно под:

Публичная функция перед фильтром() {

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

 // 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 контроллер... это обеспечит безопасность всего сайта.

Надеюсь, это поможет кому-то еще, кто тоже испытывает трудности.

 4
Author: ChrisO, 2015-04-09 02:17:53

Последний метод был для CakePHP2. Следующее немного обновлено для CakePHP3:

В папке "Мои контроллеры" в AppController.php выполните следующие действия:

1.******** Добавьте Функцию Инициализации *********


public function initialize()
{
    parent::initialize();

    /* ADD THIS NEW LINE */
    $this->loadComponent('Security', ['blackHoleCallback' => 'forceSSL']); // SSL SECURITY
  1. ************ Добавьте Новую Общедоступную Функцию **********


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

3.**** Добавьте это в функцию перед фильтром ******


public function beforeFilter(Event $event)
{

    /* ADD 2 NEW LINES */
    parent::beforeFilter($event); 
    $this->Security->requireSecure();
 3
Author: Chris O, 2017-01-14 15:48:08

Если вы видите #СЕРВЕР-HTTPS-ВКЛЮЧЕН# (включен), добавьте

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

Если вы видите #СЕРВЕР-HTTPS-ON# (1), добавьте

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

Если вы видите #СЕРВЕРНЫЙ ПОРТ443#, добавьте

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

Если вы видите #БАЛАНСИРОВЩИК НАГРУЗКИ#, добавьте

<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-ХОСТ. Это должно быть то же самое, что и ваш домен. Если нет, вам может потребоваться жесткий код ваш домен, чтобы предотвратить проблемы с перенаправлением, например:

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

Более подробная информация здесь

 1
Author: Kamal Kumar, 2017-08-31 06:31:06