Htaccess 404 перенаправить пользовательское правило для вложенных каталогов

У меня есть сайт с пользовательским файлом .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 ?

Всего 1 ответ


Все ulrs на этом сайте являются корневыми, и нигде нет структуры вложенных папок.

Вы можете использовать этот блок кода для замены всего вашего кода .htaccess:

ErrorDocument 404 /404.php

Options -MultiViews 
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]

Есть идеи?

10000