Как отправить код 404 из htaccess ?

S1
На сайте с 02.10.2016
Offline
138
1199

Можно ли как-то принудительно отправлять из htaccess в заголовке код 404 ?

Для простейшего примера попробовал так:

<FilesMatch ^2\.php$>

Header set HTTP/1.0 404 Not Found

</FilesMatch>

Получаю ошибку 500

В общем не прокатывает

Header set HTTP/1.0 404 Not Found

---------- Добавлено 01.08.2019 в 00:57 ----------

нужен именно не редирект на 404-ую страницу, а отправить header

Постоянно обмениваюсь ссылками с качественными сайтами по теме электроника, электронные компоненты, и тд.
IL
На сайте с 20.04.2007
Offline
435
#1
sanek1991:
нужен именно не редирект на 404-ую страницу, а отправить header

/ru/forum/comment/7904564

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
S1
На сайте с 02.10.2016
Offline
138
#2

не то

RewriteRule ^ - [R=404,L]

редиректит на 404-ую страницу, а нужно просто отправить статус в заголовке

IL
На сайте с 20.04.2007
Offline
435
#3
sanek1991:
редиректит на 404-ую страницу,

Не редиректит же, открывает. URL остаётся.

Status Code: 404 Not Found

Свою 404 страницу можно задать там же, в .htaccess

Если версия apache и модули позволят, можете использовать header set + условные выражения:


<If "%{REQUEST_URI} =~ #^/2.php#">
Header set HTTP/1.0 404 Not Found
</If>

Доки: http://httpd.apache.org/docs/2.4/expr.html

---------- Добавлено 01.08.2019 в 10:04 ----------

sanek1991:
<FilesMatch ^2\.php$>

А вариант установить заголовок из PHP совсем не рассматривается?

P.s. Еще можно принудительно задать prepend_file и в зависимости от REQUEST_URI в PHP устанавливать заголовок.

S1
На сайте с 02.10.2016
Offline
138
#4
ivan-lev:
Не редиректит же, открывает. URL остаётся.

как это не перенаправляет ?

флаг R - redirect

при такой директиве будет перенаправление на 404-ую страницу

url меняется

ivan-lev:

Если версия apache и модули позволят, можете использовать header set + условные выражения:


<If "%{REQUEST_URI} =~ #^/2.php#">
Header set HTTP/1.0 404 Not Found
</If>

я в первом сообщении темы уже писал, что Header set HTTP/1.0 404 Not Found выдает ошибку 500

IL
На сайте с 20.04.2007
Offline
435
#5
sanek1991:
флаг R - redirect
при такой директиве будет перенаправление на 404-ую страницу
url меняется

Пробовали? Или теория?

Теория тут: http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_r

Any valid HTTP response status code may be specified, using the syntax [R=305], with a 302 status code being used by default if none is specified. The status code specified need not necessarily be a redirect (3xx) status code. However, if a status code is outside the redirect range (300-399) then the substitution string is dropped entirely, and rewriting is stopped as if the L were used.

У меня - не меняется. Что я делаю не так? Пруф: http://prntscr.com/onb1ag

RewriteRule ^zzz.php - [R=404,L]
sanek1991:
я в первом сообщении темы уже писал, что Header set HTTP/1.0 404 Not Found выдает ошибку 500

Если вариант с RewriteRule не устраивает и не установлен mod_headers (или не подключен.. у некоторых хостеров есть возможность динамически включать модули) и версия Apache ниже 2.4, то вариантов решить задачу из первого поста средствами .htaccess без использования PHP я не вижу.

S1
На сайте с 02.10.2016
Offline
138
#6
ivan-lev:
Пробовали? Или теория?

Пробовал конечно.

Идет редирект на пользовательскую страницу 404.

---------- Добавлено 02.08.2019 в 10:54 ----------

ivan-lev:

Если вариант с RewriteRule не устраивает и не установлен mod_headers (или не подключен.. у некоторых хостеров есть возможность динамически включать модули) и версия Apache ниже 2.4, то вариантов решить задачу из первого поста средствами .htaccess без использования PHP я не вижу.

mod_headers стоит, и например такой заголовок отправляется:

Header set Cache-Control "max-age=604800, public"

Такой, дает ошибку 500

Header set HTTP/1.0 404 Not Found

S
На сайте с 30.09.2016
Offline
469
#7
ivan-lev:
вариантов решить задачу из первого поста средствами .htaccess без использования PHP я не вижу.

Могу предложить костыль

RewriteRule ^zzz\.php xxx.txt [L]
Естественно, файла xxx.txt быть не должно.;)
Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
Gerga
На сайте с 02.08.2015
Offline
94
#8
sanek1991:
как это не перенаправляет ?
флаг R - redirect

Не редиректит. Если указан R=404, то перенеправление не будет выполнено, mod_rewrite прекращает обработку следующих правил перенаправления и указывает 404 заголовок для ответа.

У вас индивидуально что-то нахимичено.


if a status code is outside the redirect range (300-399) then the substitution string is dropped entirely, and rewriting is stopped as if the L were used.

http://httpd.apache.org/docs/current/rewrite/flags.html#flag_r

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий