Я хочу сделать 301 перенаправление, но идет не так - PullRequest
1 голос
/ 05 февраля 2020

Я хочу перенаправить пользователя на страницу 404 по неправильному URL, но в итоге он перенаправляется со всех страниц. Может кто-нибудь сказать мне, что не так? Вот мой код .htaccess

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L]
RewriteCond %{REQUEST_FILENAME}\.php !-f
RewriteRule . /404.php [L,R=301]

1 Ответ

0 голосов
/ 05 февраля 2020

Не следует «перенаправлять» на документ об ошибке. Вместо этого вы должны сконфигурировать пользовательский документ об ошибках, используя директиву ErrorDocument, тогда Apache ответит с помощью 404.php, используя внутренний подзапрос, и убедитесь, что установлен правильный статус HTTP (ie. A 404, а не 301). .

Ваше условие проверки наличия файла .php (до перезаписи) не является строго правильным, в зависимости от запрашиваемого URL-пути. REQUEST_FILENAME содержит путь к файловой системе, с которым сопоставляется запрос, который не обязательно совпадает с запрашиваемым URL-путем.

Вместо этого попробуйте следующее, если ваш файл .htaccess находится в документе root:

# Define custom error documents
ErrorDocument 404 /404.php

RewriteEngine on 

# Rewrite - append .php extension if required.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule (.*) $1.php [L]
...