Pergunta

Oi eu estou tentando redirecionar todos os links para qualquer arquivo pdf no meu site para uma página com um formulário em que informações coleta de usuário antes que eles possam prosseguir para download / visualizar o pdf.

Por exemplo

Eu quero redirecionar arquivos * .pdf no site para request.php? File = name_of_pdf_being_redirected

Onde request.php é a página com o formulário nele pedindo alguns detalhes antes de prosseguir.

Todos pdf está no site são de pasta dentro / pdf.

Todas as idéias?

EDIT: desculpe, eu estou usando Apache no servidor.

OK estou chegando lá: Eu tenho que trabalhar usando agora:

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

Mas agora, quando ele vai para a página de download Quando eu quero deixar a pessoa realmente baixar o arquivo minha nova regra é cuspir o download link para o formulário de :-P haha ??assim há uma maneira de deixá-lo fazer o download do arquivo de uma vez o formulário foi submetido e você está no download.php?

Foi útil?

Solução

Você pode tentar o seguinte:

  • Mova seus arquivos para uma pasta "fora" a sua raiz web de modo que ninguém pode acessá-lo através de um navegador
  • usar sessões para detectar se uma pessoa tem de preencher o formulário ou não
  • Use um script de download de arquivo php alimentado. Na sua forma naivest, ele pode ter esta aparência:
    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 é uma técnica que eu experimentado e testado usado em um site. O exemplo de código é um esboço e necessidades refinamento.

Outras dicas

Ideias? Você poderia começar por dizer-nos qual o servidor web / app que você está usando, que podem ajudar: -)

Em Apache, você deve ser capaz de usar um RewriteRule para transformar o pedido em uma forma diferente. Por exemplo, transformando /pub/docs/x.pdf em request.php?file=/pub/docs/x.pdf poderia ser feito com algo como:

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

Tenha em mente que esta é a partir da memória (seis anos desde que eu toquei Apache e ainda limpo :-), o formato pode ser ligeiramente diferente.

Update:

Agora você tem que classificadas, aqui está um par de opções para o seu próximo problema.

1 / renomear os PDFs para ter uma extensão diferente para que eles não estão abrangidos pela regra de reescrita. Eles devem ser configurado para empurrar o mesmo tipo MIME para o cliente para que eles abrem na escolha clientes do espectador.

2 / Faça o download como parte do script, bem como, não como um acesso directo ao PDF. Desde a apresentação do formulário é uma solicitação HTTP, você deve ser capaz de responder imediatamente com o conteúdo em PDF em vez de re-direcionando-os novamente para a página de download.

Essa segunda opção seria a minha escolha, uma vez que:

  • pára de pessoas descobrir que eles podem chegar aos PDFs apenas solicitando xx.pdfx vez de xx.pdf.
  • torna mais rápido para a pessoa para obter o PDF (eles não têm de clicar no link de novo).

Note, a minha resposta é em relação a um website NET, mas tenho certeza que existem as mesmas construções em algum lugar no PHP.

Eu teria um HttpModule com um caminho de * .pdf que simplesmente faz um Response.Redirect para request.php? ... etc (no meu caso request.aspx) E, em seguida, no manipulador de eventos para o botão clique em Nessa página, quando você sabe que pdf para exibir e que eles estão autorizados, simples fazer um Response.ContentType = [tipo MIME pdf], e depois Response.WriteFile (PDFfile) e, finalmente Response.End ().

Há outras coisas que você pode adicionar para torná-lo melhor, como o tamanho do arquivo, etc. Mas, no caso mínima, isso iria funcionar. Se quiser que o código para ele em C # eu poderia chegar a algo em cerca de 3 minutos, mas em PHP Estou muito perdido. Eu começar a olhar para httpModules e como escrevê-los em PHP.

pesquisando para "PHP httpModule" leva a isto: equivalente a ASP.NET HttpModules em PHP assim, eu possa ser um pouco errado, mas espero que isso é um ponto de partida.

Use um arquivo .htaccess se você estiver usando um servidor web Apache. Você precisa ter certeza de que você tem mod_rewrite habilitado, mas uma vez que você pode reescrever todos os arquivos usando essas duas linhas simples:

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

Se você estiver usando o IIS, você pode fazer algo semelhante usando ISAPI_Rewrite.

Seu outra alternativa é colocar dentro do seu pdf de um diretório que não é acessível ao público e, em seguida, qualquer pedido feito por um recurso pdf retornaria um erro de acesso negado e os arquivos só poderia ser acessada através do script de download apropriado.

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

não mod re-escreve, peles fonte real e é o que eu faço normalmente - espero que isso ajude

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top