Я прочитал много ответов на эту тему, но ни один не упоминает, как объединить:
перенаправление всего трафика на 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
Надеюсь, это кому-нибудь поможет.
Спасибо за помощь
Просто держите правило перенаправления 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]
<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