Htaccess 404 перенаправить пользовательское правило для вложенных каталогов - PullRequest
1 голос
/ 17 мая 2019

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

1 голос
/ 17 мая 2019

Все 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]
...