Pergunta

Eu tenho GNU Wget 1.10.2 para Windows e Linux e os se comporta -k opção diferente em aqueles dois.

k, --convert-links fazer ligações no ponto HTML transferido para arquivos locais.

No windows produz:

www.example.com/index.html
www.example.com/index.html@page=about
www.example.com/index.html@page=contact
www.example.com/index.html@page=sitemap

e no linux que produz:

www.example.com/index.html
www.example.com/index.html?page=about
www.example.com/index.html?page=contact
www.example.com/index.html?page=sitemap

Esta é problemática em linux porque quando eu servir o espelho através do Apache não fará distinção entre as 4 páginas gerados desde a parte após o questionmark (? ) caractere é usado como a string de consulta ao arquivo.

Algumas ideias sobre como eu posso controlar isso?

graças

Foi útil?

Solução

Você não pode usar um ponto de interrogação (?) Em um nome de arquivo no NTFS ou FAT32. É por isso que wget usa o símbolo (@) em seu lugar.

No Linux, apenas uma barra (/) é proibido na maioria dos sistemas de arquivos, então wget usa o ponto de interrogação (desde que é parte da URI).

Você pode forçar qualquer comportamento usando --restrict-file-names=unix ou --restrict-file-names=windows.

A partir da documentação wget:

Quando o modo está definido para “unix”, Wget escapa o caractere ‘/’ e o caracteres de controlo nas gamas 0-31 e 128-159. Este é o padrão em Unix-like OS'es.

Quando o modo está definido para “janelas”, Wget escapa os caracteres ‘\’, ‘|’, ‘/’, ‘:’ ‘?’, ‘"’,‘*’,‘<’,‘>’, Eo caracteres de controlo nas gamas 0-31 e 128-159. Além disso, Wget no Windows usa o modo de ‘+’ em vez de ‘:’ To host separado e porta no local, nomes de arquivo e usa ‘@’ em vez de ‘?’ Para separar a parte de consulta de o nome do arquivo do resto. Portanto, uma URL que seria salvo Como ‘www.xemacs.org:4300/search.pl?input=blah’ em Unix modo seriam salvos como ‘www.xemacs.org+4300/search.pl@input=blah’ em modo Windows. Este modo é o padrão no Windows.

Outras dicas

Esta é problemática em linux porque quando eu servir o espelho através do Apache não fará distinção entre as 4 páginas gerados desde a parte após o questionmark (?) Caractere é usado como a string de consulta para o arquivo.

Para incluir um ponto de interrogação em uma parte do caminho URL, você pode escapar-lo:

www.example.com/index.html%3Fpage=about

- converte-links deveria estar fazendo isso para você, eu acho -. Pode ser um erro se não

Esta é problemática em linux porque quando eu servir o espelho através Apache não fará distinção entre as 4 páginas geradas desde o parte após o questionmark (?) caractere é usado como a string de consulta para o arquivo.

Se já é tarde este comando sed me ajudou:

find . -type f -name "*html*" -exec sed -i -r 's/(src|href)=(["\x27])(.*?)(\?)(.*?)\2/\1=\2\3%3F\5\2/g' {} + 

Ele substitui? em href = ou src = marcas com% 3F. (\ X27 é o único carrapato)

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