Вы могли бы дать приоритет файлу, когда он приходит без / с тем же именем и каталогом, а также с расширением файла html, например:
DirectorySlash Off
RewriteEngine on
RewriteCond %{THE_REQUEST} \s/+(.*?/)?(?:index)?(.*?)\.(html)[\s?/] [NC]
RewriteRule ^ /%1%2 [R=302,L,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*) /$1.html [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*) %{REQUEST_URI}/ [L,R=302]
Затем добавьте свой остальные правила:
RewriteRule ^products/(.*)$ /product/$1 [R=301,NC,L]
Таким образом, с помощью приведенного выше кода расширение HTML будет удалено, затем сервер сначала проверит, существует ли файл HTML, соответствующий этому запросу, а затем, если существует соответствие каталога этот запрос.
Очистите кеш браузера и проверьте его, если все в порядке, измените 302 на 301, чтобы получить постоянное перенаправление
Для получения дополнительной информации, вы также можете обратиться к моему предыдущему ответу:
Удалить. php и. html расширения И имеют каталоги с одинаковыми именами?