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>
Другие вопросы по тегам