У меня есть сайт с пользовательским файлом .htaccess, который обрабатывает несколько вещей:
1) Он обрабатывает URL-адреса без расширений ".php", как если бы он имел ".php" в конце.
2) Перенаправляет http: // и http://www. URL-адреса на https://www.
Вот файл .htaccess:
RewriteEngine On
## add www and turn on https in same rule
RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L,NE]
# if not a directory and .php file is present then add .php extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
ErrorDocument 404 /404.php
Все работает какожидалось, но я обнаружил некоторые странные ссылки в Инструментах для веб-мастеров, которые приводят к ошибке 500 вместо 404:
Когда вы посещаете несуществующий URL-адрес корневого уровня, такой как https://www.example.com/skjdfhkj, он перенаправляется на 404, как и ожидалось.
Однако, когда вы посещаете какой-то вложенный URL-адрес, такой как https://www.example.com/some-page/skjdfhkj, где some-page
соответствует имени существующего php-файла, выдается ошибка 500 Server.Когда some-page
не соответствует ни одному из существующих файлов php, он возвращает 404, как и ожидалось.
Все ulrs на этом сайте являются корневыми, и нигде нет структур вложенных папок.Я проверил код, и нет ссылок, указывающих на вложенные URL, поэтому не уверен, как они попали в Инструменты для веб-мастеров, скорее всего, в какой-то момент на сайте были какие-то ошибочные ссылки, которых больше нет.
Мой вопрос: как мне обновить свой htaccess, чтобы он правильно возвращал 404, когда кто-то посещает несуществующий вложенный URL, такой как https://www.example.com/some-page/skjdfhkj?