Перенаправление 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]