2012-06-21 25 views
11

Quiero mostrar un error 404 si un usuario llega a una página que existe pero no quiero que lo vea.PHP: muestra un error 404 sin redireccionar a otra página

no quiero hacer redirección (que causaría la barra de direcciones para mostrar el enlace de la página de error en la barra de direcciones) como el siguiente:

if ($this_page_should_not_be_seen) 
    header("Location: err.php?e=404"); 

En cambio, debería parecer la la página realmente no existe, sin tener que cambiar la URL en la dirección del navegador.

+1

y lo que está mal con .htaccess? – k102

+1

Ese es el trabajo para .htaccess, no para el archivo PHP ... o, para ambos, si solo redirige todo a index.php, pero aún así, necesita .htaccess o acceso a httpd.conf. – Griwes

+1

¿quiere decir que su navegador muestra el error 404 en lugar de una página 404 personalizada? puede redirigirlo a alguna página que no existe en la actualidad. –

Respuesta

24

incluir la página de error en la página actual y enviar un código de estado de error 404:

<?php 
if ($nobody_should_ever_be_here) { 
    header('HTTP/1.1 404 Not Found'); //This may be put inside err.php instead 
    $_GET['e'] = 404; //Set the variable for the error code (you cannot have a 
        // querystring in an include directive). 
    include 'err.php'; 
    exit; //Do not do any more work in this script. 
} 
?> 

Tenga en cuenta que esto debería usarse si la página nunca se debe ver. Un código de estado mejor para el acceso no autorizado (si la página debe ser vista por algunos usuarios que han iniciado sesión) es 403 (No autorizado).

+0

Me di cuenta de esto tarde, pero esto es realmente lo que quiero. –

4

Puede lograr un 404 (o cualquier otro código de respuesta HTTP en realidad) mediante programación con

header('HTTP/1.0 404 Not Found'); 
die; 
+0

Lo hice antes ... no funcionó .. –

+0

@RajBD : Siempre funcionaría si PHP se ejecuta como un módulo de Apache (frente a ejecutarse como FastCGI).Tal vez no haga lo que * espera *. – Jon

+1

@DilipRajBaral Está funcionando, pero cuando mueras() poco después del encabezado, verás una salida vacía. Cuando usas php header 404 no generará automáticamente contenido. Debe agregar algunos contenidos antes de morir() para crear su página 404 personalizada. El encabezado se usa para indicar a los motores de búsqueda, arañas y bots que la URL actual ya no está disponible. –

1

Lo que escribe nos dificulta su comprensión.

Quiero redirigir cualquier usuario entrante a la página de error 404 si s/he llega a la página que no lo quiero/ella alcanzara.

Entonces, ¿una persona llega a una página que existe?

Si la persona llega, por ejemplo, a una página protegida que no se supone que debe ver. Usar encabezado es la mejor manera. Sus opciones son hacer eco meta-refresh o javascript, pero el encabezado es mucho más limpio. Puede mostrar algo como You do not have permission to do that! que es bastante común en la web. Si no desea redirigir, puede mostrar un "mensaje falso" 404 a través del encabezado.

Si usted está hablando de alguien llegar a una página 404, un archivo que no existe, la única opción es utilizar .htaccess

+0

@ k102 Ya se está utilizando .htaccess para la gestión de páginas de error. Lo que quiero hacer es simplemente mostrar la página de error para la página existente como se habría mostrado para la página no existente. –

2

En mi experiencia la mejor manera de mostrar documento de error 404 sin cambiar el URL es definir documento de error en el archivo de apaches .htaccess:

RewriteEngine on 
RewriteBase/

# Defines 404 error pages content: 
ErrorDocument 404 /my_root/errors/404.html 

# for all invalid links (non existing files): 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* - [L,R=404] 

# for some valid links (existing files to be un-accessible): 
RewriteCond %{THE_REQUEST} ^.*some_file.php.*$ [NC] 
RewriteRule .* - [L,R=404] 
Cuestiones relacionadas