.htaccess - удаление расширения .html приводит к внутренней ошибке 500 (для чего должно быть 404?) - PullRequest
0 голосов
/ 30 августа 2018

Я использую .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

1 Ответ

0 голосов
/ 31 августа 2018
RewriteRule (.*)\.html$ $1 [R=301]

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

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

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

Options -Indexes -MultiViews

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

...