2015-08-05 2 views
4

htaccess файл, который перенаправляет мое продвинутое приложение Yii2 на файл frontend index.php для того, что есть файл .htaccess. который имеет следующие строки ..Переадресация http на https в Yii2 .htaccess

Это прямо сейчас мой .htaccess в корневой директории

Options -Indexes 

<IfModule mod_rewrite.c> 
RewriteEngine on 

    RewriteCond %{REQUEST_URI} !^public 
    RewriteRule ^(.*)$ frontend/web/$1 [L] 
</IfModule> 

# Deny accessing below extensions 
    <Files ~ "(.json|.lock|.git)"> 
    Order allow,deny 
    Deny from all 
    </Files> 

# Deny accessing dot files 
    RewriteRule (^\.|/\.) - [F] 

Теперь я искал интернет и я нашел, что это, если я хочу, чтобы перенаправить на HTTPS, то я должен добавить этот ,

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

так я добавил, как это ....

Options -Indexes 

<IfModule mod_rewrite.c> 
    RewriteEngine on 

    RewriteCond %{HTTPS} off 
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

    RewriteCond %{REQUEST_URI} !^public 
    RewriteRule ^(.*)$ frontend/web/$1 [L] 
</IfModule> 

# Deny accessing below extensions 
    <Files ~ "(.json|.lock|.git)"> 
    Order allow,deny 
    Deny from all 
    </Files> 

# Deny accessing dot files 
    RewriteRule (^\.|/\.) - [F] 

затем загружает сайт withouat любых JS и CSS ... а также он находится в HTTP. Но контент, который он требует, должен быть в https.

Я понимаю, что это из-за моего другого заявления о перезаписи. Но я не так разбираюсь в этом. Пожалуйста, сделайте предложение.

Здесь эта вещь, если она одна, отлично работает без проблем.

RewriteCond %{HTTPS} off 
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

Он пошлет мой НТТР HTTPS. Так что это работает.

Или, если это одна

RewriteCond %{REQUEST_URI} !^public 
    RewriteRule ^(.*)$ frontend/web/$1 [L] 

Это правило говорит, что выполнить файл index.php из [Каталог/фронтэнда/Web/.htaccess] каталог. Средство выполняет интерфейс/web/index.php. Здесь очень важно сделать это, поскольку это соответствует структуре структуры.

Поэтому у меня есть объединить эти два правила вместе и построить .htaccess, который будет работать для обоих сценариев.

ЗАКЛЮЧЕНИЕ

Так что мой .HTACESS должен сообщить серверу, мы должны запустить [.HTACESS DIR/интерфейс/веб/index.php] в протокол HTTPS.

ОБНОВЛЕНИЕ НА ВОПРОС

это .htaccess под фронтэнда/веб/папку, где мой index.php является

И это в корневой/интерфейс/веб-папку, где индекс .php существует.

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule . index.php 

Должен ли я добавить Https вещь здесь?

+0

это не перенаправлять главную страницу HTTPS ... он остается в HTTP .. это также требует ресурсов в http ... но ресурсы не разрешены в http .. они разрешены только в https. –

+0

@anubhava вы можете проверить http://iklyn.com/ –

+0

да, он работает ... и из-за этого создает проблему .. может быть два условия перезаписи противоречат друг другу .. !! –

ответ

6

Вы root/frontend/web/.htaccess должны быть такими:

RewriteEngine on 
RewriteBase /frontend/web/ 

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

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule^index.php [L] 

Просто помните, что подкаталог .htaccess всегда имеет приоритет над родительским каталогом .htaccess.

0

Я использовал этот код ниже.

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

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

Это просто www> не-www переадресация обработки HTTP и HTTPS, а не то, что пытается сделать OP. – Andy

0

Другой подход должен был бы изменить виртуальный хост на порт 80 (HTTP):

<VirtualHost *:80> 
    ServerName mywebsite.com 
    Redirect permanent/https://mywebsite.com 
</VirtualHost> 

, а затем иметь отдельный виртуальный хост для порта 443 (HTTPS).

Предполагая, что сервер Linux Debian (-fork) вам нужно будет поставить выше в /etc/apache2/sites-available/myname.conf. После того, как вы это сделали, используйте sudo a2ensite myname.conf (если это не удается, вы можете создать символическую ссылку в /etc/apache2/sites-enabled/, но не пытайтесь). Теперь перезапустите apache с помощью 'sudo service apache2 restart'.

1

В корне .htaccess, когда я помещаю это. Это также работает для меня.

RewriteEngine on 

RewriteCond %{HTTPS} off 
RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 

RewriteCond %{REQUEST_URI} !^public 
RewriteRule ^(.*)$ frontend/web/$1 [L] 
6

Самый простой способ может быть установка обработчика события on beforeRequest в /config/web.php так:

... 
'bootstrap' => ['log'], 
'on beforeRequest' => function ($event) { 
    if(!Yii::$app->request->isSecureConnection){ 
     $url = Yii::$app->request->getAbsoluteUrl(); 
     $url = str_replace('http:', 'https:', $url); 
     Yii::$app->getResponse()->redirect($url); 
     Yii::$app->end(); 
    } 
}, 
... 
+0

Я нашел способ Yii2 ... это приятно ... !! –

Смежные вопросы