Я использую .htaccess, чтобы удалить расширение .html из моих URL. Например ...
https://www.example.com/work.html> https://www.example.com/work
Я хочу, чтобы сайт отображал страницу 404 (или правильную страницу с ошибкой), если кто-то пытается получить доступ к файлу / каталогу, которого там нет (например) https://www.example.com/work/new. Но это возвращает 500 Внутренняя ошибка сервера.
Строка .htaccess ErrorDocument 500 /errors/500.html не возвращает этот файл (он работает для 404, 403 и т. Д.). Возвращает эту ошибку ...
Кроме того, при попытке использовать ErrorDocument для обработки запроса возникла ошибка 500 Internal Server Error.
Журнал ошибок Apache сообщает ...
AH00124: Запрос превысил предел 10 внутренних перенаправлений из-за возможной ошибки конфигурации. Используйте LimitInternalRecursion, чтобы увеличить лимит, если это необходимо. Используйте 'LogLevel debug', чтобы получить обратную трассировку.
Я предполагаю, что это связано с тем, что он по сути пытается найти каталог в html-файле (пытается найти каталог "new" внутри html-файла "work.html"), поэтому возвращает ошибку 500 вместо 404 .
Ниже мой файл .htaccess. Кто-нибудь может помочь с лучшим способом сделать это или способ обойти это?
# Disable Directory Listing
Options -Indexes
# X-Robots-Tag
Header set X-Robots-Tag "noindex, nofollow"
# Rewrite Engine
RewriteEngine On
# Root Directory
RewriteBase /
# Remove .html Extension
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.html\ HTTP
RewriteRule (.*)\.html$ $1 [R=301]
# Remove index + Reference Directory
RewriteRule (.*)/index$ $1/ [R=301]
# Remove Trailing Slash **If Not Directory**
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /$
RewriteRule (.*)/ $1 [R=301]
# Forward Request To html File, **But Don't Redirect (Bot Friendly)**
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.html [L]
# Errors
ErrorDocument 403 /errors/403.html
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html