У меня есть некоторые 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
файл.