заставить SSL + WWW в CakePHP .htaccess - PullRequest
       0

заставить SSL + WWW в CakePHP .htaccess

4 голосов
/ 01 сентября 2011

Я знаю, что тема «Как заставить HTTPS + WWW» часто обсуждается и решается, и в целом это работает для меня.

Но так как я сейчас получил определенный предопределенный .htaccess от CakePHP, я не знаю, как его включить.

.htaccess для CakePHP:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

Если я добавлю нормальный код для HTTPS / WWW Forcing вперед или назад к этому коду, он не будет работать должным образом, потому что все запросы установлены в корневой каталог, а не, например, на. /contact.

Обычно я использую:

RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !^www\.mydomain\.com$ [NC]
RewriteRule ^ https://www.mydomain.com%{REQUEST_URI} [R=301]

Но вы не можете просто включить это выше ...

Может ли кто-нибудь помочь мне , включая HTTPS / WWW Forcing в вышеупомянутом .htaccess?

Ответы [ 4 ]

5 голосов
/ 30 сентября 2014

Общий способ:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTPS} !on
    RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f    
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

Нет необходимости жестко кодировать доменное имя. Также запрос не будет перенаправлять в root при переключении с http на https

2 голосов
/ 01 сентября 2011

Спасибо LazyOne, возможно, это работает, но для меня это часто заканчивалось на «mydomain.com/redirect:/app/webroot/index.php», что было действительно странно. Но, возможно, это из-за "{REQUEST_URI}" , потому что мне пришлось изменить

RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

до

RewriteRule ^(.*)$ index.php [QSA,L]

из-за странных проблем с редиректом (понятия не имею, что случилось, CakePHP внезапно запросил "Redirect: Controller" , как также описано здесь http://groups.google.com/group/croogo/browse_thread/thread/55539dabfd0191fd?pli=1 - есть идеи по этому поводу?).

Сейчас работает с этим кодом:

RewriteCond %{HTTP_HOST} ^mydomain.com
RewriteRule (.*) https://www.mydomain.com/$1 [R=301,L]   

RewriteCond %{HTTPS} !on
RewriteRule (.*) https://www.mydomain.com/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f    
RewriteRule ^(.*)$ index.php [QSA,L]
1 голос
/ 01 сентября 2011

Вот как это должно быть:

RewriteEngine On

# force https and www.
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !^www\.mydomain\.com$ [NC]
RewriteRule ^ https://www.mydomain.com%{REQUEST_URI} [R=301,L]

# route all requests for non-existing resources to CakePHP
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
0 голосов
/ 02 сентября 2011

другим способом может быть принудительное использование SSL с помощью компонента?http://bakery.cakephp.org/articles/lemon/2008/07/07/component-for-forcing-a-secure-connection

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...