Последняя строка в ваших правилах:
RewriteRule ^(.*)\.html$ /$1 [R=302,QSA]
Это означает, что нужно изменить любой file.html
на file
, и вам нужно только принять file
только перенаправить его внутренне на file.html
вот так:
RewriteRule ^(.*)$ /$1.html [L,QSA]
Но в этом случае file.html
будет таким, как есть, если вы хотите удалить .html
, попробуйте следующие правила:
RewriteEngine on
RewriteCond %{THE_REQUEST} \s/+(.*)\.html[\s?/] [NC]
RewriteRule ^ /%1 [R=301,L,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ /$1.html [L]
Первые две строки после RewriteEngine on
удаляют .html
.
Остальные строки проверят, является ли запрос без расширения файлом .html
или нет, если он принят .html
будет перенаправлен, но внутри.
Теперь оба, site1.html
или site1
будут site1
в браузере.
Таким образом, вы убедитесь, что файл принимает .html
расширение перед перенаправлением, и это разделит этот этап смешивания с файлами ошибок.