2008-12-29 11 views
10

¿Cómo hago para que mi servidor Apache 2 obligue a un navegador a abrir un diálogo de transferencia de archivos si la URL apunta a un archivo con extensión .pln o .psa?¿Cómo hago que mi servidor Apache 2 fuerce un navegador para abrir un diálogo de transferencia de archivos?

Tengo un servidor LAMP simple con CentOS 5, Apache 2, MYSQL 5, PHP 5, CDs de instalación CentOS 5.2 i386 recientemente construidos. Mi aplicación web genera archivos para descargar e importar en una aplicación personalizada. Las extensiones de archivo son .psa y .pln. ¿Cómo hago que mi servidor obligue al navegador a abrir un diálogo de transferencia de archivos? Si apunto mi navegador a un archivo .psa o .pln en el servidor Apache 2, el contenido del archivo se muestra en una ventana emergente como texto simple. Quiero un diálogo de transferencia de archivos.

La aplicación web en la que estoy trabajando está implementada en otro servidor web y maneja los archivos .pln y .psa como desee. No puedo comparar los archivos de configuración del servidor porque no tengo acceso de administrador al servidor en funcionamiento.

¿Cómo cambio el comportamiento de mi servidor? ¿Esto requiere cambios de código en el código de mi aplicación web (como el envío de encabezados explícitos)? Si es así, ¿por qué funciona contra el otro servidor? ¿Se pueden evitar los cambios de código configurando el comportamiento predeterminado del servidor?

Cualquier ayuda sería apreciada.

Respuesta

6

Debería poder usar la directiva FilesMatch para agregar el encabezado necesario.

<FilesMatch "\.(?i:pin)$"> 
    Header set Content-Disposition attachment 
</FilesMatch> 
+0

Agregué las líneas de arriba a mi archivo /etc/httpd/conf/httpd.conf y reinicié el servicio httpd (también lo intenté con pln en lugar de pin). Los archivos .psa y .pln todavía se muestran como texto en mi navegador. –

+1

Lo sentimos, leí mal la extensión. La sintaxis de RegEx sería "\. (? I: pln) | (? I: psa) $" ¿Intentó ponerlo en su archivo .htaccess? Además, puede agregar la línea: Encabezado ContentType application/octent justo antes de la otra línea del encabezado. – palehorse

+2

Gracias. Agregar lo siguiente a mi archivo /etc/httpd/conf/httpd.conf solucionó el problema. aplicación ForceType/desconocido cabecera de set de fijación Content-Disposition tuve que borrar (IE7) los archivos temporales de Internet de mi navegador para que los cambios surtan efecto. –

0

Forzar un navegador para hacer algo es siempre un asunto complicado, ya que el navegador puede ignorar y hacer lo que demonios le gusta :)

Dicho esto, la mayoría de los navegadores le indicará al usuario con un cuadro de diálogo "guardar como" si el encabezado "Content-type" está establecido en "application/octet-stream". Escriba un envoltorio simple cgi que sirva el archivo solicitado con el encabezado correcto o toque los tipos mime de Apache2 (busque en el directorio de configuración)

Espero que esto ayude, feliz piratería (y feliz Navidad, año nuevo o lo que usted puede celebrar)

Misha

0

Ahh, no sabía de eso palehorse cabecera, que es probablemente una mejor manera, ya que le permite conservar el tipo MIME original, habrá que recordar que uno.

+0

También puede establecer el Tipo de contenido utilizando ese método si desea forzar la aplicación/octeto. Solo agregue la aplicación/octeto ContentType del encabezado. Eso lo hago un poco más confiable. Hacerlo en la configuración o .htaccess es agradable, evitando el script del archivo de descarga. – palehorse

0

Probé varios cambios de configuración que no tuvieron ningún efecto aparente.

  1. que añade la siguiente línea al archivo de mi /etc/httpd/conf/httpd.conf:

AddType application/octet-stream .pln .psa

me reinicia el servidor Apache y no tuvo efecto.

  1. agregué las siguientes líneas a mi archivo /etc/httpd/conf/httpd.conf: aplicación ForceType/octet-stream cabecera de set de disposición de contenido desapego Aplicación ForceType/octet-stream Conjunto de encabezado Adjunto Content-Disposition He reiniciado el servidor Apache y no tuvo ningún efecto.
+0

¿Has probado la sintaxis FilesMatch? – palehorse

+0

Sí. Ver mis comentarios arriba. La directiva FilesMatch resolvió mi problema. –

0

Si tiene Firefox (y si no, ¿por qué no?) Instale Chris Pedericks Developer Toolbar, y verifique que los encabezados se estén configurando correctamente. Si es así, puede ser culpa del navegador. Como dije, no puede estar seguro de que un navegador determinado interpretará "correctamente" los encabezados de respuesta. ¿De qué navegador estamos hablando aquí de todos modos?

Si los encabezados no se configuran correctamente, es posible que necesite volver a verificar su archivo httpd.conf. Posiblemente las directivas que ha agregado no están en la sección correcta? (por ejemplo, bajo la directiva incorrecta <Location>)

Cuestiones relacionadas