.htaccess - удаление расширения файла .html вызывает внутреннюю ошибку 500 (ибо что должно быть 404?)

Я использую .htaccess, чтобы удалить расширение .html из моих URL-адресов. Например...

https://www.example.com/work.html > https://www.example.com/work

Я хочу, чтобы на сайте отображалась страница 404 (или правильная страница ошибки), если кто-то пытается получить доступ к файлу/каталогу, которого там нет (например) https://www.example.com. Но это возвращает 500 Internal Server Error.

Строка .htaccess ErrorDocument 500 /errors/500.html не возвращает этот файл (работает для 404, 403 и т. д.). Он возвращает эту ошибку...

Кроме того, при попытке использовать ErrorDocument для обработки запроса возникла ошибка 500 Internal Server Error.

Журнал ошибок Apache говорит...

AH00124: Запрос превысил ограничение в 10 внутренних перенаправлений из-за вероятной ошибки конфигурации. Используйте «LimitInternalRecursion», чтобы увеличить лимит, если это необходимо. Используйте отладку LogLevel, чтобы получить обратную трассировку.

Я предполагаю, что это связано с тем, что он по существу пытается найти каталог в html-файле (пытаясь найти каталог «новый» внутри 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

person Community    schedule 30.08.2018    source источник
comment
Проверьте файл Apache error.log на наличие ошибок 500.   -  person anubhava    schedule 30.08.2018
comment
В журнале ошибок Apache говорится... «AH00124: запрос превысил ограничение в 10 внутренних перенаправлений из-за вероятной ошибки конфигурации. Используйте «LimitInternalRecursion», чтобы увеличить лимит, если это необходимо. Используйте «отладку LogLevel», чтобы получить обратную трассировку».   -  person    schedule 30.08.2018
comment
https://www.example.com/work вызывает ошибку 500?   -  person anubhava    schedule 31.08.2018


Ответы (1)


RewriteRule (.*)\.html$ $1 [R=301]

Вам нужны флаги L (last) для всех ваших внешних перенаправлений, чтобы предотвратить дальнейшую обработку. Например:

RewriteRule (.*)\.html$ $1 [R=301,L]

Также убедитесь, что MultiViews отключено:

Options -Indexes -MultiViews

Предположительно, вы уже ссылаетесь на URL без расширения?

person MrWhite    schedule 30.08.2018
comment
Спасибо за ответ. Я добавил ваши предложения. Все внешние перенаправления теперь имеют L-флаги, и я также отключил MultiViews. Все еще получаю ту же ошибку AH00124. - person ; 31.08.2018
comment
Кроме того, да, я ссылаюсь на URL-адрес без расширения - person ; 31.08.2018