Apache Перенаправить все в index.php с помощью https

Я прочитал много ответов на эту тему, но ни один не упоминает, как объединить:

перенаправление всего трафика на index.php + перенаправить все http в httpS

Следующее прекрасно работает для перенаправления всех в index.php:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|public|css|js|robots\.txt)
RewriteRule ^(.*) index.php/params=$1 [L,QSA]

прежде чем я сделал это, я смог заставить http для https с помощью этого:

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

Я просто не могу найти способ смешать оба, чтобы он перенаправил весь трафик в index.php, используя те же условия и принудительно установил https.

* редактировать *

на случай, если кто-то запутается, как я.

Причина, по которой https систематически возвращал 404 при вызове переписанных URL-адресов, заключается в том, что … мой файл конфигурации домена был неполным, мой веб-сайт-ssl.conf отсутствовал AllowOverride All директива, вот почему все работало нормально, пока я не добавил переписывание URL. Мой non-ssl был правильно настроен для перезаписи URL, поэтому мне потребовалось немного времени, чтобы понять, что это не работает, когда https.

Затем я добавил необходимые в мой /etc/apache2website-ssl.conf

<Directory /var/www/vhosts/exemple.com>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>

и это в моем .htaccess

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://exemple.com/$1 [R,L]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|public|css|js|robots\.txt)
RewriteRule ^(.*) index.php/params=$1 [L,QSA]
ErrorDocument 404 /index.php

Надеюсь, это кому-нибудь поможет.
Спасибо за помощь

3

Решение

Просто держите правило перенаправления https выше других правил:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [NC,L,R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|public|css|js|robots\.txt)
RewriteRule ^(.*) index.php/params=$1 [L,QSA]
3

Другие решения

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}/index.php
</IfModule>

Так что в приведенном выше случае, если пользователь собирается http ссылка, обе (re-write в https а также forward to index.php) произойдет (я пытался и это работает). но если пользователь собирается https напрямую, то вы должны иметь простой rewriting в index.php в вашем default-ssl

1