404 перенаправление на страницу не работает php / htaccess

У меня небольшая проблема с моим перенаправлением php htaccess 404 - это не перенаправление.

У меня есть настройка htaccess, чтобы убрать расширение с имен файлов / страниц, и мне интересно, является ли это причиной моей проблемы. Однако я застрял и, кажется, не могу понять этого.

Правильно, он просто перенаправляет все ошибки на страницу индекса.

Я безуспешно пробовал это предложение -Перезаписать URL после перенаправления ошибки 404 htaccess

Какие-либо предложения?

Вот мой htaccess:

Options -Indexes +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^www.sitename.com$ [NC]
RewriteRule ^(.*)$ http://sitename.com/$1 [R=301,L]

## hide .php extension snippet

# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]

# To internally forward /dir/foo to /dir/foo.php
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_FILENAME}.php -f
#RewriteRule ^(.*?)/?$ $1.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)index(\?|\ )
RewriteRule ^ /%1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteRule . index [L] 

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]*/)*index\.(html?|php[45]?)(\?[^\ ]*)?\ HTTP/
RewriteRule ^(([^/]*/)*)index\.(html?|php[45]?)$ http://sitename.com/$1 [R=301,L]


#if query string is empty
RewriteCond %{QUERY_STRING} ^$
#match on / for root, or .index.php in request and send to query string version 
RewriteRule ^invoices.php?$ /invoices?status=open [R=301,L] 
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^projects.php?$ /projects?status=open [R=301,L] 

#RewriteRule ^(/|invoices.php)?$ /invoices?status=open [R=301,L]
#RewriteRule ^(/|projects.php)?$ /projects?status=open [R=301,L]


ErrorDocument 400 /errors.php
ErrorDocument 403 /errors.php
ErrorDocument 404 /errors.php
ErrorDocument 405 /errors.php
ErrorDocument 408 /errors.php
ErrorDocument 500 /errors.php
ErrorDocument 502 /errors.php
ErrorDocument 504 /errors.php

Вы переписываете все запросы, не относящиеся к файлам и каталогам, на index.php, поэтому очевидно, что 404 не происходит.

anubhava 19.09.2018 16:24

@anubhava Должен признаться, я действительно не очень разбираюсь в htaccess (вообще). Я предполагаю, тогда вы имеете в виду 2 блока, в которых есть "индекс"? Не могли бы вы указать мне в правильном направлении, как правильно изменить?

JonnyPlow 21.09.2018 04:41

Хорошо, я просто попробовал, заменив "index" на "errors" (errors.php), и похоже, что он работает, но так ли это на самом деле? Я спрашиваю, потому что он не выдает статус сервера 404 $_SERVER['REDIRECT_STATUS'];, а вместо этого выдает 200

JonnyPlow 21.09.2018 04:55

Верно. Если вам нужен статус 404, удалите правило RewriteRule . index [L] (с двумя строками RewriteCond выше) и просто оставьте ErrorDocument 400 /errors.php

anubhava 21.09.2018 11:54

@anubhava Отлично, вроде уже работает. Спасибо, что указали мне правильное направление!

JonnyPlow 22.09.2018 20:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
82
0

Другие вопросы по теме