Вам необходимо изменить порядок обработки:
# Enable mod_rewrite
RewriteEngine on
# Force www
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Force SSL
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
# Rewrite file name
RewriteRule ^dome\.htm$ dome.php [L,QSA]
Также обратите внимание на слегка измененное регулярное выражение в этом RewriteRule
; -)
Почему это имеет значение? Представьте, что входящий запрос переписывается ... По вашему порядку правил запрос сначала переписывается на /dome.php
, , затем перенаправляется на https://%{HTTP_HOST}%{REQUEST_URI}
, что дает указание браузеру загрузить /dome.php
с этого нового URL ... RewriteRules обрабатываются сверху вниз. Конечно, вы указали флаг [L]
, однако это только завершает перезапись _ для этой итерации! Если последняя итерация изменила запрос (была выполнена перезапись), то http 101-сервер выполняет другую итерацию .
Альтернативой было бы оставить ваш порядок правил, но использовать флаг [END]
вместо [L]
, который делает то, что вы хотите. Но он поддерживается только в более новых версиях http-сервера apache, начиная с версии 2.4.