Tengo un problema con las descargas de WooCommerce en somoslaluz.com.
Los archivos están alojados en Cloudflare R2 mediante estos dominios personalizados:
Ambos dominios están habilitados en los directorios de descarga aprobados. Las URLs directas funcionan.
El resultado de las pruebas es:
Con «Forzar descargas»: aparece «Archivo no encontrado».
Con «Solo redireccionar»: la misma compra descarga correctamente.
Los enlaces de compra comienzan por somoslaluz.com/?download_file=…, como corresponde a las descargas gestionadas por WooCommerce.
Las URLs se actualizaron mediante un plugin personalizado que modifica únicamente el campo del archivo descargable y conserva sus identificadores.
¿Podéis ayudarnos a revisar por qué falla «Forzar descargas» y cómo comprobar si PHP puede recuperar los archivos desde esos dominios? ¿Qué registros necesitáis para identificar el error?
Hola Emilia,
Gracias por detallar las pruebas. Los dominios:
https://librosr2.somoslaluz.com/
https://otroslibros.somoslaluz.com/
¿Nos compartes la URL completa de uno de los archivos descargables? Luego lo eliminamos de la vista, es para comprobar lo que nos comentas, ya que los enlaces que compartes dan 404 porque no son los finales. Por lo que comentas, esas URLs directas funcionan y el problema aparece únicamente cuando seleccionas:
WooCommerce > Ajustes > Productos > Productos descargables > Forzar descargas
Forzar descargas es PHP quien debe recuperar el archivo remoto y posteriormente entregárselo al cliente. Puedes comprobar primero en:
Herramientas > Salud del sitio > Información > Servidor
si:
allow_url_fopen
Aparece habilitado. Si está desactivado, WooCommerce no podrá utilizar correctamente el método Forzar descargas con archivos remotos. También sería conveniente revisar si Cloudflare tiene alguna regla WAF, protección contra bots o restricción aplicada sobre esos subdominios que pueda permitir el acceso desde un navegador pero bloquear la petición realizada desde el servidor.
Si puedes facilitarnos una URL completa de uno de los archivos como te indico, para verificar mejor. No necesitamos que sea un producto real si dispones de algún archivo de prueba dentro del mismo bucket.
Un saludo 🖐️
Hola. He revisado Herramientas → Salud del sitio → Información → Servidor, pero no aparece el ajuste allow_url_fopen. Adjunto la captura.
¿Podéis comprobar si está habilitado para mi web o indicarme dónde consultarlo en el panel de Webempresa?
en la actualidad esta puesto para que se descarge el archivo directamente con lo que se ve la url de Cloudflare, y si funciona la descarga, pero si indico que fuerce la descarga, me sale como que no existe el archivo. esto es lo que me de
Hola Emilia,
La captura que nos adjuntas parece corresponder al error de descarga de WooCommerce, pero no a la sección:
Herramientas > Salud del sitio > Información > Servidor
Dónde estabas revisando `allow_url_fopen`. En cualquier caso, puedes comprobar este parámetro directamente desde WePanel. Accede a:
WePanel > Herramientas > Parámetros PHP
Selecciona la versión PHP que utiliza tu web y después entra en:
Configuracion PHP > Opciones de PHP > modo avanzado
Busca allí:
allow_url_fopen
y comprueba si aparece activado. Como te comentamos antes WooCommerce no consigue recuperar el archivo remoto desde Cloudflare R2. Por tanto, lo que necesitamos es una URL directa completa de uno de los archivos almacenados en R2 que sepamos que funciona al abrirla directamente en el navegador.
Con esa URL podremos comprobar si el problema está en el acceso desde PHP, en la respuesta de Cloudflare o en algún encabezado/restricción aplicada al archivo.
Un saludo 🖐️
el allow_url_fopen esta activado, aqui te dejo un enlace,
Hola Emilia,
Gracias, ya procedimos a borrar ell enlace para que no quede visible, ahora vemos un detalle en la URL del archivo y es que el nombre contiene espacios. Como anteriormente comentabas que las URLs de los productos se modificaron mediante un plugin personalizado, te recomendamos revisar primero la URL que está guardada dentro del producto.
Accede al producto correspondiente y, en:
Datos del producto > Descargable > Archivos descargables
Comprueba que la URL aparezca exactamente codificada como la compartes y no con espacios. Para ejemplificarte sin compartir de nuevo tu enlace, te indico un ejemplo:
nombre del archivo
y no como:
nombre%20del%20archivo
WooCommerce utiliza PHP para abrir directamente el archivo remoto cuando seleccionas Forzar descargas, por lo que una URL con espacios sin codificar puede provocar que PHP no pueda abrirla aunque el navegador sí consiga hacerlo al utilizar el modo de redirección.
Para evitar este tipo de problemas, nuestra recomendación sería incluso renombrar los archivos almacenados en Cloudflare R2 utilizando nombres compatibles con URL, por ejemplo:
nombre-del-archivo.pdf
Guardar después en WooCommerce:
despierta-para-pdf.pdf
Haz primero esta prueba únicamente con un producto. Si funciona, habría que aplicar el mismo criterio al resto de archivos: evitar espacios, tildes y caracteres especiales en los nombres de los objetos de R2. Como solución temporal, WooCommerce dispone también en:
WooCommerce > Ajustes > Productos > Productos descargables
de la opción:
Permitir usar el modo de redirección como último recurso.
De esta forma puedes usar Forzar descargas como método principal y, si PHP no puede recuperar algún archivo remoto, WooCommerce utilizaría la redirección para evitar que el cliente reciba el error Archivo no encontrado. Pero, primero probaría corrigiendo el nombre y la URL de un archivo, ya que esto permitiría mantener el método Forzar descargas sin exponer directamente la URL de Cloudflare.
Un saludo 🖐️