Ты действительно близко к тому, что у тебя есть.Теперь, когда я знаю проблему, я дам вам то, что я использую - вам нужно условие, которое говорит, что не является каталогом - И синтаксис: !-d
Вот как мой внешний вид htaccess (потому что я использую его для удаления html
, а также php
:
RewriteEngine on
# Redirect www and http to https - non-www
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
# Start php extension remove
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
# End php extension remove
# Start html extension remove
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
# End html extension remove
Как вы видите, первое условие проверяетубедитесь, что это не каталог. Следующее условие проверяет, имеет ли расширение файла .php
. Если оба условия true - Правило чтобы удалить расширение.
Как примечание - я бы сделал ваш синтаксис немного чище и отделил бы "разделы" того, что вы пытаетесь сделать.
ОБНОВЛЕНИЕ КАК ЗАКОММЕНТАРИЙ
Чтобы удалить форсирование https
- просто закомментируйте первое условие и измените https
на http
в правиле :
RewriteEngine on
# Redirect www and http to https - non-www
#RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
# Start php extension remove
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
# End php extension remove
# Start html extension remove
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
# End html extension remove