• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

250
Vistas
Apache usa su propio controlador 404 en lugar de index.php para archivos .txt

Quiero atender todas las solicitudes de archivos no existentes a través de .php

Configuración de .htaccess :

 ErrorDocument 404 /index.php DirectoryIndex index.php RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [L]

Esto parece funcionar principalmente, pero algunas extensiones de archivo específicas (.txt, .jpg, ¿algunas más?) son manejadas por apache en lugar de pasar a través de php.
http://localhost:8000/home -> muestra la página de inicio
http://localhost:8000/file.zip (no existe) -> muestra una página 404 con estilo personalizado servida por PHP

http://localhost:8000/exists.txt (archivo existente) -> sirve archivo existente
http://localhost:8000/doesnotexist.txt (no existe) -> muestra la página predeterminada de apache 404 (igual que cuando no está instalado PHP)

¿Hay algún controlador de apache predeterminado para extensiones de archivo específicas?
¿Cómo puedo configurar TODAS las solicitudes para que pasen a través de index.php?

Usando docker php 7.4 apache como mi imagen base

about 3 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Copié tu experimento con Docker y la imagen php 7.4-apache. Al abrir la url http://localhost:8000/doesnotexist.txt , soy transferido al archivo index.php como esperaba. Las tres reglas de reescritura inferiores reescribirán todo en index.php.

En primer lugar: no ha publicado un docker-compose.yml o Dockerfile , así que para estar seguro: debe habilitar la reescritura para Apache mediante un comando en el dockerfile o un Dockerfile personalizado como este:

 # Dockerfile FROM php:7.4-apache RUN a2enmod rewrite

Si no hubiera habilitado la reescritura, debería aparecer un error 500, porque no hay condiciones condicionales en torno a la regla de reescritura.

Si habilitó la reescritura, el comportamiento sigue siendo extraño, porque incluso si la línea ErrorDocument 404 /index.php no está allí, la reescritura inferior debería hacer que index.php se sirva de todos modos. En otras palabras: las tres líneas inferiores en .htaccess se asegurarían de que no se sirva ningún 404, porque todo se reescribe en index.php.

Cuando dices 'la página predeterminada de apache 404', ¿estás hablando de la página 'No encontrada'?

 Not Found (H1 tag) The requested URL was not found on this server. Apache/2.4.52 (Debian) Server at localhost Port 8000

Intente eliminar y reconstruir el contenedor, de modo que ningún problema extraño de almacenamiento en caché pueda causar problemas.

¿Y qué hay de su index.php . ¿Hay algo allí que pueda desencadenar algo extraño? ¿Podrías publicarlo aquí?

about 3 years ago · Santiago Trujillo Denunciar

0

Pruebe esto en su archivo .htaccess (sin la parte ErrorDocument):

 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ index.php?file=$0 [QSA,L]

Asegúrese de generar 404 si el código no encuentra el archivo.

about 3 years ago · Santiago Trujillo Denunciar

0

  • ¿Hay algún controlador de apache predeterminado para extensiones de archivo específicas?
    No, no existe un controlador de este tipo de forma predeterminada.

  • ¿Cómo puedo configurar TODAS las solicitudes para que pasen a través de index.php?

  1. ErrorDocument 404 /index.php es válido.
  2. DirectoryIndex index.php es válido
  3. RewriteEngine on es válido
  4. RewriteCond %{REQUEST_FILENAME} !-f es válido
  5. RewriteCond %{REQUEST_FILENAME} !-d es válido
  6. RewriteRule ^ index.php [L] también es válido!

Tenga en cuenta que no lo está reescribiendo en la raíz /index.php, sino que lo está reescribiendo sin la barra inclinada, y lo reescribe en index.php en el directorio actual. Entonces, si index.php no existe en el directorio actual, es probable que entre en un bucle infinito.

Tratar:

 ErrorDocument /index.php DirectoryIndex index.php RewriteEngine On RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [L] # use '/index.php' if needed to redirect to root index.php

Esto redirigirá que todo existe a index.php y evitará conflictos con ErrorDocument .

Pero, creo que esto es lo que realmente quieres hacer:

 ErrorDocument /index.php DirectoryIndex index.php # remove those rewrite rules
about 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda