RewriteEngine выдает ошибку 500, внутренняя ошибка сервера для 404 страниц – apache2
Я хотел заменить расширения .html в Apache ничем.
Например.DNS/coffee.html
бытьDNS/coffee
. Я нашел себе этот код.
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ $1.html [L]
</IfModule>
Он выполняет ту работу, которую я хотел, но это не так.
Кажется, не нравится404.html
за ошибки. Каждый раз, когда я открываю несуществующую страницу, мне больше не выдается страница 404, а появляется сообщение об ошибке внутреннего сервера 500:
Внутренняя ошибка сервера
На сервере произошла внутренняя ошибка или неправильная конфигурация, и он не смог выполнить ваш запрос.
Свяжитесь с администратором сервера по адресу EMAIL, чтобы сообщить ему о времени возникновения этой ошибки и о действиях, которые вы выполнили непосредственно перед этой ошибкой.
Дополнительную информацию об этой ошибке можно найти в журнале ошибок сервера.
Кроме того, при попытке использовать ErrorDocument для обработки запроса возникла ошибка 500 Internal Server Error. Сервер Apache/2.4.41 (Ubuntu) с URL-портом 443
Я не знаю, что мне делать, гугл не дает мне мудрых ответов, только такие вещи, как «как перенаправить страницу на 404.html» или «как сделать каждую ссылку, которая не ведет на этот DNS перередактировать на страницу 404».
Вот код для.htaccess
.
# ------------------Error Pages--------------------
# 404 NOT FOUND
ErrorDocument 404 /errors/404.html
# -----------------Rem .html and .htm extensions---
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ $1.html [L]
</IfModule>
1 ответ
Ваше правило перезаписи, отличное от HTML, отрицательно влияет на/errors/404.html
никогда не загружался.
Это приводит к тому, что Apache продолжает пытаться загрузитьerrors/[something].html
и в конечном итоге зацикливается, пока не завершится с ошибкой 500.
Он не загружает404.html
страницу из-за небрежной логики, которая у вас здесь.
Если кто-то пойдет вDNS/ddqqweeqewqweewq
— или какой-то другой бессмысленный URL-адрес, который, как вы знаете, не работает — тогда ваши правила предписывают серверу попытаться загрузитьDNS/ddqqweeqewqweewq.html
а затем загружается результирующая ошибка/errors/404/ddqqweeqewqweewq.html
. Которого не существует.
Попробуйте добавить URL-адресRewriteCond
такой какRewriteCond %{REQUEST_FILENAME} !^/errors/
надRewriteRule
так:
# ------------------Error Pages--------------------
# 404 NOT FOUND
ErrorDocument 404 /errors/404.html
# -----------------Rem .html and .htm extensions---
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !^/errors/
RewriteRule ^([^/]+)/?$ $1.html [L]
</IfModule>