Pregunta

Hola Estoy tratando de redirigir todos los enlaces a cualquier archivo PDF en mi sitio a una página con un formulario en el mismo que recoge información del usuario antes de que puedan proceder a descargar / ver el PDF.

Ej

Quiero redirigir archivos * .pdf en el sitio web para request.php? File = name_of_pdf_being_redirected

Cuando request.php es la página con la forma en que pedir algunos detalles antes de proceder.

Todos los PDF en el sitio se llevan a cabo en el interior / carpeta PDF.

¿Alguna idea?

Edit: Lo siento que estoy usando Apache en el servidor.

Aceptar lo estoy logrando: Tengo que trabajar ahora usando:

RewriteEngine en RewriteRule ^ pdf /(.+. Pdf) $ request.php? File = / $ 1 [R]

Pero ahora, cuando se va a la página de descarga cuando quiero dejar que la persona que realmente descargar el archivo de mi nueva regla es escupir el enlace de descarga de nuevo a la forma :-P jaja así que hay alguna forma de dejar que se descargue el archivo una vez el formulario ha sido enviado y que está en download.php?

¿Fue útil?

Solución

Puede intentar esto:

  • Mover los archivos a una carpeta de su raíz web "fuera" para que nadie pueda acceder a él a través de un navegador
  • Use sesiones para detectar si una persona ha completado el formulario o no
  • Utilice una secuencia de comandos de descarga de archivos PHP Basado. En su forma naivest, que podría tener este aspecto:
    if ( isset( $_SESSION[ 'OK_TO_DOWNLOAD' ] ) == false )
    {
        header( "Location: must_fill_this_first.php" );
        exit( 0 );
    }

    header( "Content-type: application/pdf" );
    // double check the above, google it as i am not sure

    echo file_get_contents( 'some_directory_inaccessible_thru_www/' . $_GET[ 'pdf_name' ] );
    // ideally a binary-safe function needs to be used above

Esta es una técnica de eficacia probada que utilicé en un sitio web. El ejemplo de código es un proyecto de esquema y necesita refinamiento.

Otros consejos

Ideas? Se podría empezar por decirnos qué servidor web / aplicación que está usando, que podría ayudar: -)

En Apache, debería ser capaz de utilizar un RewriteRule a transformarse la solicitud en una forma diferente. Por ejemplo, convirtiendo en /pub/docs/x.pdf request.php?file=/pub/docs/x.pdf se podría hacer con algo como:

RewriteRule ^/pdf/(.*)\.pdf/  request.php?file=/$1.pdf

Tenga en cuenta que se trata de la memoria (seis años desde que toqué Apache y todavía :-) limpio, el formato puede ser ligeramente diferente.

Actualización:

Ahora usted tiene que ordenadas, aquí hay un par de opciones para su siguiente problema.

1 / Cambiar el nombre de los archivos PDF a tener una extensión diferente, por lo que no están atrapados por la regla de reescritura. Ellos deben ser configurados para empujar a cabo el mismo tipo MIME para el cliente para que se abran en la elección de los clientes espectador.

2 / Haga la descarga como parte de la secuencia de comandos, así, no como un acceso directo al archivo PDF. Desde la presentación del formulario es una solicitud HTTP, debe ser capaz de responder de inmediato con el contenido PDF en lugar de volver a dirigirlos más a la página de descarga.

Esa segunda opción sería mi elección, ya que:?

  • impide que las personas averiguar que pueden llegar a los archivos PDF simplemente mediante la solicitud de xx.pdfx en lugar de xx.pdf.
  • hace que sea más rápido para la persona para obtener el PDF (que no tienen que hacer clic en el enlace de nuevo).

Tenga en cuenta, mi respuesta es con respecto a un sitio web .NET, pero estoy seguro que existen las mismas construcciones en algún lugar de PHP.

Me gustaría tener un HTTPModule con un camino de * .pdf que simplemente hace un Response.Redirect a request.php? ... etc (en mi caso request.aspx) Y luego, en el controlador de eventos para el botón haga clic en esa página, cuando se sabe qué pdf para mostrar y que están autorizados, simple = Response.ContentType hace una [MIME tipo de pdf], y luego Response.WriteFile (PDFfile), y finalmente Response.End ().

Hay otras cosas que se pueden agregar para que sea mejor, tales como tamaño del archivo, etc, pero en el caso mínimo, esto funcionaría. Si desea que el código para ello en C # que podía llegar a algo en unos 3 minutos, pero en PHP que estoy bastante perdido. Me gustaría empezar a buscar httpModules y cómo escribirlas en PHP.

Google para "PHP HTTPModule" lleva a esto: de ASP.NET HttpModules en PHP es así, que puede ser un poco mal, pero espero que eso es un punto de partida.

Utilice un archivo .htaccess si está utilizando un servidor web Apache. Tendrá que asegurarse de que ha habilitado el mod_rewrite, pero una vez que se puede volver a escribir todos los archivos a través de estos dos simples líneas:

En RewriteEngine RewriteRule ^ $ .pdf /rewrite.php [NC, L]

Si está utilizando IIS, puede lograr algo similar usando ISAPI_Rewrite.

Su otra alternativa es colocar en el interior de su pdf de un directorio que no es accesible al público y cualquier solicitud para un recurso pdf devolverá un error de acceso denegado y los archivos sólo se podía acceder a través de la secuencia de comandos de descarga adecuado.

if($user==authenticated){
 //set pdf headers
 echo file_get_contents('actual.pdf');

no re-escribe mod, esconde fuente real y es lo que normalmente hago - espero que esto ayude

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top