Переписать .htaccess - удалить все расширения - PullRequest
1 голос
/ 23 марта 2020

Я хотел бы сделать правило перезаписи, которое удаляет все расширения - независимо от имени файла

, например:

Я пытался:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteRule ^(.*)\.*$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule  ^(.+)$ *? [QSA,L]

</IfModule>

не работает как надо

1 Ответ

0 голосов
/ 23 марта 2020

Вы можете только разумно делать то, что вы просите, с помощью 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 входит (первая часть моего ответа).

...