2015-07-14 2 views
2

Я пытаюсь сделать свой сайт добавлением конечной косой черты, а затем переписать URI на страницу html. В основном перенаправить xy.com/abc на xy.com/abc/, а затем загрузить xy.com/abc.html.Сервер Apache загружает страницу вместо применения правила перезаписи

Мой .htaccess файл выглядит следующим образом:

RewriteEngine on 
RewriteBase/
RewriteRule ^([a-z]+)$ $1/ [R] 
RewriteRule ^([a-z]+)/$ $1.html [L] 

Когда я пытаюсь идти к xy.com/asd (не существующей страницы) перенаправляет на xy.com/asd/ и дает мне правильную ошибку 404.

Когда я пытаюсь создать страницу, которая на самом деле существует (xy.com/about), она просто загружает xy.com/about.html без перенаправления вообще.

ответ

1

Попробуйте этот код:

Options -MultiViews 
RewriteEngine on 
RewriteBase/

RewriteRule ^([a-z]+)$ $1/ [R,NC,L] 

RewriteCond %{DOCUMENT_ROOT}/$1.html -f 
RewriteRule ^([a-z]+)/$ $1.html [L,NC] 
+1

Awesome, 'Параметры -MultiViews' решает проблему самостоятельно. Большое спасибо. Правильно ли я понимаю, что RewriteCond проверяет, существует ли файл html с правильным именем, прежде чем пытаться его загрузить? Какая разница, если она 404? – zsmb13

+0

Да, действительно, 'RewriteCond' гарантирует, что файл' .html' существует до добавления расширения '.html'. Также для обоих правил нужен флаг 'L'. – anubhava

Смежные вопросы