Como servir um diretório wget --mirror'ed de arquivos com pontos de interrogação neles

5

Estou tentando criar um espelho estático de um aplicativo php (uma instalação antiga do Php Gallery, especificamente). O aplicativo produz URLs como:

view_album.php?set_albumName=MyAlbum

wget os transfere diretamente para arquivos com o mesmo nome, com os pontos de interrogação. Para não quebrar os links de entrada, gostaria de manter esses nomes. Mas como eu os sirvo? Estou com dois problemas:

  1. Os servidores Web (corretamente) tentam localizar "view_album.php" e passar os argumentos de consulta, em vez de encontrar um arquivo com um ponto de interrogação. Como eu digo a um servidor para procurar arquivos com um ponto de interrogação neles? Renomear os arquivos não é desejável, pois iria quebrar links de entrada. Não posso dizer aos vinculadores de entrada para codificar% em seus URLs.

  2. Os arquivos não terminam com HTML, portanto, a maioria dos servidores da Web não envia um cabeçalho de tipo de conteúdo html. Quais parâmetros de configuração devo procurar para forçar um tipo de conteúdo 'text / html' para todos os arquivos em um diretório ou que correspondam a um determinado padrão?

Estou usando o lighttpd no final das contas, mas se você souber que tipo de configuração pode obter os resultados desejados com o apache / nginx, eu adoraria ouvir isso também.

    
por user67641 13.01.2012 / 16:29

3 respostas

3

Eu acho que você também pode consertar isso alterando a maneira como wget baixa os arquivos php:

wget -r --adjust-extension --convert-links 'http://example.com/index.php?foo=bar'

A opção --adjust-extension faz com que wget salve os arquivos PHP com uma extensão .html , por exemplo index.php?foo=bar.html

A opção --convert-links faz com que wget convertam os links nos arquivos baixados para os arquivos .html recém-criados. Note que esta conversão ocorre após todos os arquivos foram baixados.

Veja também: link

    
por 21.11.2012 / 10:00
3

wget downloads these directly to files named the same, complete with question marks.

Você pode desativar esse comportamento com --restrict-file-names=ascii,windows , isso resolve seu problema diretamente no wget, sem precisar de configurações sofisticadas do servidor.

    
por 21.12.2014 / 09:10
0

Eu acho que você pode usar mod_rewrite no Apache para fazer isso. Idealmente, se você disser mod_rewrite para fazer o que parece como uma reescrita inútil, você pode fazer com que ele sirva um arquivo cujo nome inclui a string de consulta. Coloque algo assim na configuração do seu servidor (não, infelizmente, em .htaccess ou <Directory> )

RewriteEngine on
RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^(.*) /path/to/webdir/$1?%1

Não sei o que isso fará com URLs com vários pontos de interrogação. Acho que também acrescentará um ponto de interrogação a URLs sem string de consulta. Você poderia alterar o primeiro regexp para (.+) , mas ele removeria o ponto de interrogação dos URLs com uma string de consulta vazia.

Se isso não funcionar, você poderia renomear os arquivos para algum nome sem pontos de interrogação (por exemplo, alterá-los para% s ou algo assim) e usar:

RewriteEngine on
RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^(.*) /path/to/webdir/$1\%%1

Eu não sei como isso lida com o PATH_INFO. Se o Gallery usar, talvez seja necessário adicionar algo como

RewriteCond %{PATH_INFO} (.*)
RewriteRule ^(.*) /path/to/webdir/$1/%1

(Mas você teria um conflito se o Gallery usasse os dois " link " e " link ", já que você não poderia ter o index.php no sistema de arquivos tanto para um arquivo quanto para um diretório. Você poderia contornar isso fazendo mais algum nome munging.)

Enquanto lançamos um monte de mod_rewrite, podemos usá-lo para definir tipos MIME:

RewriteRule \.php - [T=text/html]

ou

RewriteCond %{REQUEST_FILENAME} \.jpg$
RewriteRule ^ - [T=image/jpeg]

ou coisas semelhantes. (Note como o primeiro se quebraria se um álbum ou foto continha ".php", etc.)

Deixe-nos saber como isso acontece!

    
por 16.01.2012 / 00:57

Tags