redirect - soluciona - ¿Cómo fuerzo la redirección de todos los 404(o todas las páginas, sean inválidas o no) a la página de inicio?
solucionar errores 404 (4)
Configuración de la página de error a la página de inicio como esta
error_page 404 /index.html;
tiene un pequeño problema, el código de estado de la página de inicio será "404 no encontrado", si desea cargar la página de inicio con un código de estado de "200 ok", debe hacerlo así
error_page 404 =200 /index.html;
Esto convertirá el código de error "404 no encontrado" en un código "200 ok" y cargará la página de inicio
El segundo método que mencionó @jvperrin también es bueno,
try_files $uri $uri/ /index.html;
pero debe tener en cuenta 1 cosa, ya que la location /
cualquier activo que no coincida con otra ubicación y no se encuentre también cargará el archivo index.html
, por ejemplo, imágenes faltantes, archivos css, js, pero en su caso Puedo ver que ya tienes otra ubicación que coincide con las extensiones de los activos, por lo que no deberías enfrentar este problema.
Actualmente, cada página no válida es 500 (Error interno del servidor) porque probablemente me equivoqué con la configuración de bloqueo de mi servidor.
Decidí cerrar mi sitio web hace un tiempo y creé una página de agradecimiento sencilla de una página. Sin embargo, los enlaces antiguos y los sitios externos siguen intentando acceder a otras partes del sitio, que ya no existen.
¿Cómo fuerzo la redirección de todas las páginas que no son de inicio (cualquier URL no válida) a la página de inicio?
Lo intenté con el siguiente bloque, pero no funcionó:
location / {
try_files $uri $uri/ $document_uri/index.html;
}
Mi configuración actual es (ni siquiera sirvo archivos PHP en este momento, es decir, la página principal es html simple):
server {
server_name www.example.com example.com;
access_log /srv/www/example.com/logs/access.log;
error_log /srv/www/example.com/logs/error.log;
root /srv/www/example.com/public_html;
index index.php index.html;
location / {
try_files $uri $uri/ $document_uri/index.html;
}
# Disable favicon.ico logging
location = /favicon.ico {
log_not_found off;
access_log off;
}
# Allow robots and disable logging
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# Enable permalink structures
if (!-e $request_filename) {
rewrite . /index.php last;
}
# Handle php requests
location ~ /.php$ {
try_files $uri = 404;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_send_timeout 900;
fastcgi_read_timeout 900;
fastcgi_connect_timeout 900;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
# Disable static content logging and set cache time to max
location ~* /.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
access_log off;
log_not_found off;
expires max;
}
# Deny access to htaccess and htpasswd files
location ~ //.ht {
deny all;
}
# Deny access to hidden files (beginning with a period)
location ~ //. {
access_log off; log_not_found off; deny all;
}
}
Debe usar
"fastcgi_intercept_errors on;"
junto con la ubicación de redirección personalizada como error_page 404 =200 /index.html
o
como anteriormente
location @myownredirect {
return 302 /;
}
Intente agregar la siguiente línea después de su definición de index
:
error_page 404 /index.html;
Si eso no funciona, intente cambiar la llamada de try_files
a la siguiente:
try_files $uri $uri/ /index.html;
Con suerte, uno de esos trabajos para ti, tampoco lo he probado.
Para obtener un verdadero redireccionamiento puedes hacer esto:
en serverblock define la página de error que deseas redireccionar así:
# define error page
error_page 404 = @myownredirect;
error_page 500 = @myownredirect;
A continuación, se define esa ubicación:
# error page location redirect 302
location @myownredirect {
return 302 /;
}
En este caso, los errores 404 y 500 generan HTTP 302 (redirección temporal) a / (podría ser, por supuesto, cualquier URL)
Si usa fast-cgi para php u otro, estos bloques deben tener agregado lo siguiente para enviar los errores "upstrem" a server-block:
fastcgi_intercept_errors on;