.htaccess - конфликт директив

Futuris
На сайте с 05.07.2014
Offline
74
841

Буду благодарен тем, кто поделится опытом работы с .htaccess.

Делаем сайт на html и необходимо решить две задачи:

1. Убрать расширение html из URL страниц. Для этого используем директивы -

RewriteCond %{SCRIPT_FILENAME} !-f

RewriteCond %{SCRIPT_FILENAME} !-d

RewriteRule ^(.*)$ $1.html [NC,L]

Результат - расширения убираются, как и задумано.

2. Санкционировать появление страницы ошибки 404. Для этого вставляем в .htaccess -

ErrorDocument 404 http://mysite.ru/errors/404.html

Все работает и страница ошибок появляется.

Однако эти задачи решаются только по отдельности.

Но когда я пишу все эти директивы вместе - расширения убираются, а страница ошибки 404 не показывается.(( Подскажите пожалуйста в чем здесь дело?

J
На сайте с 20.02.2014
Offline
120
jkm
#1


RewriteCond %{SCRIPT_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html [L]

ErrorDocument 404 /errors/404.html
Futuris
На сайте с 05.07.2014
Offline
74
#2
jkm:

RewriteCond %{SCRIPT_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html [L]

ErrorDocument 404 /errors/404.html

Спасибо! Заработало :)

Futuris
На сайте с 05.07.2014
Offline
74
#3

Поставленные задачи:

1. Убрать расширение html из URL страниц.

2. Санкционировать появление страницы ошибки 404.

удалось решить благодаря совету jkm. Использовались директивы в .htaccess:

RewriteCond %{SCRIPT_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html [L]

ErrorDocument 404 /errors/404.html

А как сделать, чтобы при сохранении этих задач еще добавить закрывающий слэш?

Часто цитируемые команды типа

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]

- не срабатывыают((

J
На сайте с 20.02.2014
Offline
120
jkm
#4
Futuris:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]

Эти правила действуют ровно наоборот, перенаправляя на адреса без "/".

А предыдущие правила


RewriteCond %{SCRIPT_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html [L]

ErrorDocument 404 /errors/404.html

нужно заменить на такие


RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.*[^/])$ /$1/ [R=301,L]

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

ErrorDocument 404 /errors/404.html
Futuris
На сайте с 05.07.2014
Offline
74
#5
jkm:

...нужно заменить на такие

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.*[^/])$ /$1/ [R=301,L]

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

ErrorDocument 404 /errors/404.html

Спасибо огромное! Это работает :). Пошел учить матчасть.))

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий