Acabei de fazer páginas estáticas de um antigo Joomla com este comando:
wget --adjust-extension --mirror --page-requisites --convert-links http://my.domain.com
A versão curta é:
wget -E -m -p -k http://my.domain.com
Isso salva páginas com .hml
extensão e obterá (quase) todos os arquivos css
, js
e imagens que as páginas precisam.
Mas eu queria que meu espelho estático tivesse os mesmos links que o original. Assim, os nomes dos arquivos não puderam ter a extensão .html
, o que me fez remover a opção -E
.
Descobri então que a opção -p
(e -k
) não funciona da mesma maneira se você não usar o -E
. Mas usar -E
e -p
ainda é a melhor maneira de obter a maior parte do page-requisites
. Então eu fiz uma primeira busca com ele, deletei todos os arquivos .html
e, em seguida, obtive tudo novamente sem -E
.
Como a opção -k
sem -E
também não converte todos os links, tive que fazer algumas substituições.
A lista completa de comandos usados é:
# To get almost every thing:
wget --adjust-extension --mirror --page-requisites --convert-links http://my.dommain.com
# Remove files ending with .html:
find my.dommain.com/ -name '*.html*' -exec rm {} \;
# Get pages without .html extension:
wget --mirror --page-requisites --convert-links http://my.dommain.com
# Check if there are unconverted absolute URL and which are:
grep -lr "http:\/\/my.dommain.com" my.dommain.com/ | sort -u | xargs sed -ne '/http:\/\/my\.dommain\.com/s/.*"http:\/\/\([^"]*\).*/http:\/\//p' | sort -u
# Unconverted absolute URL correspond to missing needed files, so get them:
grep -lr "http:\/\/my.dommain.com" my.dommain.com/ | sort -u | xargs sed -ne '/http:\/\/my\.dommain\.com/s/.*"http:\/\/\([^"]*\).*/http:\/\//p' | sort -u | wget -x -i -
# Then, converter all missing absolute URL to relative:
grep -lr “http:\/\/my.domain.com” my.domain.com/ | sort -u | xargs sed -i -e '/http:\/\/my\.domain\.com/s/http:\/\/my\.domain\.com\/\([^"]*\)//g'
# Converter all URL with "?" into its URL encoding equivalent (%3F):
grep -lr –exclude=*.{css,js} '=\s\{0,1\}”[^?"]*?[^"]*”' my.domain.com/ | sort -u | xargs sed -i -e '/\(=\s\{0,1\}”[^?"]*\)?\([^"]*”\)/s/\(=\s\{0,1\}”[^?"]*\)?\([^"]*”\)/%3F/g'
Como eu estava espelhando um site em um caminho no meu domínio, acabei com este arquivo:
my.domain.com/subsite/index.html
Esse index.html
foi excluído pelo meu segundo comando, o que é ok.
Quando eu corri o segundo wget
criei um arquivo com o mesmo nome do diretório e um index.php
dentro dele, como:
my.domain.com/subsite.1
my.domain.com/subsite/index.php
... e convertido (pelo menos alguns) links para home para subsite.1
. Se todos os links residenciais fossem os mesmos, apenas um desses dois arquivos seria necessário. E index.php
é a melhor escolha, pois é exibida automaticamente quando um cliente solicita http://my.domain.com/subsite
.
Para resolver isso eu corri:
# To verify if there were links to subsite.1:
grep -r 'subsite\.1' my.domain.com/
# To convert links from subsite.1 to subsite:
grep -lr 'subsite\.1' my.domain.com/ | sort -u | xargs sed -i -e '/subsite\.1/s/\(subsite\)\.1//g'
# Then I could delete the "duplicated" index file:
rm my.domain.com/subsite.1
No final, usando uma ferramenta de desenvolvimento web (firebug), descobri que ainda faltavam alguns arquivos incluídos no javascript ou no css. Eu peguei um por um.