Перенаправление http на https в Yii2.реврайт

файл htaccess, который перенаправляет мое расширенное приложение Yii2 на индекс интерфейса.php-файл для этого уже существует .файл htaccess. который имеет следующие строки..

это прямо сейчас мой .Откройте файл. htaccess в корневой директории

Options -Indexes

<IfModule mod_rewrite.c> 
 RewriteEngine on

  RewriteCond %{REQUEST_URI} !^public
  RewriteRule ^(.*)$ frontend/web/ [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/ [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} 

он отправит мой http на https. Так он работает perfact.

или если это один

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

это правило говорит, что выполнить индекса.php-файл из [.каталог htaccess/frontend/web/] каталог . Значит выполнить frontend / web / index.РНР. Здесь очень важно сделать это как в рамках структуры.

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

вывод

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

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

это .htaccess в папке frontend/ web/, где мой индекс.php-это

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

RewriteEngine on

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

RewriteRule . index.php

мне нужно добавить https здесь ?

5 ответов


вы 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.


самый простой способ может быть задание 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();
    }
},
...

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

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

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

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


в корень .htaccess, когда я ставлю это. Это также работает для меня.

RewriteEngine on

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

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

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

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

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