Вы можете только разумно делать то, что вы просите, с помощью MultiViews
.
Например, просто:
Options +MultiViews
Вам необходимо удалить существующие директивы mod_rewrite.
Теперь запрос на example.com/horses
будет правильно перенаправлен на /horses.txt
, или на любые расширения файлов, которые вы используете. MultiViews
использует mod_negotiation.
Это не так просто сделать с mod_rewrite, так как вам нужно проверить каждое расширение файла по очереди, чтобы определить, какой файл нужно переписать обратно для маршрутизации. запрос правильно. например. Следует ли запросить example.com/horses
маршрут до /horses.txt
или horses.jpg
? MultiViews делает это сравнение за вас.
Я бы хотел создать правило перезаписи, которое удаляет все расширения
Хотя вам действительно нужно удалить расширение файла в HTML источнике. Это не то, что вы делаете в .htaccess
, если только вам не нужно сохранить SEO или обратные ссылки, которые уже ссылались на старые URL.
ОБНОВЛЕНИЕ: Возможно, я не был не достаточно ясно, я хотел бы, чтобы URL отображался без расширения, даже если он связан с ним, или с go к этому файлу, если он связан без расширения
Ну, вам нужно на самом деле удалить расширение файла на все ваши внутренние ссылки. Вы можете выполнить «перенаправление» в .htaccess
, чтобы удалить расширение для поисковых систем и сторонних ссылок, но если вы полагаетесь на это для внутренних ссылок, это может замедлить работу пользователей и вашего сайта, так как вы удваиваете количество запросов, попадающих на ваш сервер.
Чтобы удалить расширение файла для прямых запросов (SEO / сторонние ссылки), вы можете сделать что-то вроде этого:
RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^([^.]+)\.[\w]{2,4}$ /$1 [R=302,L]
Это предполагает, что единственная точка в URL-пути - это точка, ограничивающая расширение файла.
Затем трудной частью является внутренняя перезапись запроса обратно в базовый файл с расширением - вот где MultiViews
входит (первая часть моего ответа).