Назад | Перейти на главную страницу

.htaccess не может перенаправить URL без расширения

У меня есть некоторые URL-адреса (связанные извне), у которых нет расширения, например

www.example.com/main

Изначально были файлы main.htm и main.html в корне сервера.

Однако

RewriteRule ^main$ main.html [L,R=301]

не работает.

Нет папки main/ ни файл с именем main в корне сервера.

Есть и другие записи в .htaccess файл, который действительно работает, поэтому я уверен, что RewriteMod активен и работает. Еще у меня есть правила перезаписи опечаток (ссылка на www.example.com/xyz) который можно перенаправить.

RewriteRule ^xyz\)$ xyz/index.html [L,R=301]

Интересно то, что www.example.com/main URL-адрес отображается в браузере без изменений (URL-адрес в строке браузера не изменяется (как при перенаправлении)), но страница отображается с содержимым файла main.de.html. Если я создам файл с именем main.da.html он появляется с этим контентом (но только после перезапуска apache).

Я не могу понять, как он туда попадает или как его перенаправить на main.html.

Отключите MutliViews в верхней части вашего .htaccess файл:

Options -MultiViews

MultiViews (часть mod_negotiation) обычно поиск для физических файлов, которые соответствуют main (в данном случае) как базовое имя (и ответит соответствующим mime-типом). Это случилось перед mod_rewrite. Итак, если у вас был файл с именем main.de.html, это будет служить внутренним подзапросом (без перенаправления) до того, как mod_rewrite сможет обработать.

(но только после перезапуска apache).

Обычно это не требует перезапуска Apache. Хотя возможно, что какое-то кеширование происходит. (?)

RewriteRule ^main$ main.html [L,R=301]

Кроме того: вряд ли это будет действительным в качестве внешнего перенаправления, если у вас нет существующего RewriteBase директива (я полагаю, у вас должна быть)? В противном случае вы должны префикс замена с косой чертой. т.е. /main.html (если файл находится в корне документа).

www.example.com/main URL отображается в браузере без изменений

Если проблема не в MulitViews, возможно, директива находится в неправильном месте в файле конфигурации, а другие директивы, возможно, конфликтуют. Нам нужно увидеть вашу .htaccess файл.