WordPress MU blogien arkistointi selattavaan muotoon
Mikael Willberg
4.5.2010 English, Suomi Projektit · Häkkeröinti Wordpress
Päädyin tilanteeseen missä tuli arkistoida satoja blogeja WordPress MU (multi-user) palvelimelta selattavaan muotoo. Palvelin salli myös ainoastaan salatut https yhteydet. Tämä vaikutti helpolta tehtävältä, mutta todellisuus oli jotain aivan muuta...
Ilmeinen ratkaisu oli käyttää wget työkalua, mutta tästä ei jäänyt käteen kuin tiedostoja joissa vaadittiin kirjautumaan eri blogeihin. Tarkistin myös että blogit oli määritelty julkisiksi. Luulen että tämä on sama ongelma vaivasi Andrew Harveytä: Saving the WordPress.com Export File and The Linked Media Files (and wget’s strictness). Kokeilin myös joitakin Windows pohjaisia työkaluja kuten httrack, mutta nämä toimivat samalla tavalla tai niistä puuttui SSL tuki.
Oletettavasti vika on siinä että wget noudattaa orjallisesti RFC suosituksia, mikä aiheuttaa lisää vaivaa. Tässä tapauksessa syynä on se että kirjautumistietoja sisältävät keksit on "lukittu" tiettyihin hakemistoihin, vaikka niitä olisi aivan hyvin voinut käyttää kaikissa. En halunnut alkaa kääntämään wget ohjelmaa itse, vain tämän ongelman poistamiseksi ja lopulta onnistuinkin, mutta "riittävän" turhautumisen jälkeen.
Ratkaisu
Tämän menetelmän pitäisi toimia yhtä hyvin tavallisen WordPress blogin kanssa.
1. Luo uusi WPMU testikäyttäjä.
2. Kirjaudu tunnuksella sisään.
3. Tallenna "wordpressuser" ja "wordpresspass" keksien sisältö. Muista tarkistaa palvelin sekä hakemisto, koska vastaavia keksejä saattaa olla lukuisia.
Firefox käyttäjät voivat tukeutua Cookie Exporter lisukkeeseen jolla voi tallentaa kaikki selaimen keksit tiedostoon ja kopioida tarvittavat arvot sieltä.
4. Käytä wget ohjelmaan itse arkistointiin. Tässä täydellinen komentorivi.
wget -m -nv -x -k -K -e robots=off -E --ignore-length --no-check-certificate -np --cookies=off --header "Cookie: wordpressuser=KÄYTTÄJÄTUNNUS;wordpresspass=KOODATTUSALASANA" -U "IE6 on Windows XP: Mozilla/4.0 (compatible; MSIE 6.0; Microsoft Windows NT 5.1)" https://PALVELIN/HAKEMISTO/
Todennäköisesti haluat käyttää oheista taulukkoa käyttämieni asetusten tulkitsemisessa.
-m | Turn on options suitable for mirroring. This option turns on recursion and time-stamping, sets infinite recursion depth and keeps ftp directory listings. It is currently equivalent to ‘-r -N -l inf --no-remove-listing’. |
-nv | Turn off verbose without being completely quiet (use ‘-q’ for that), which means that error messages and basic information still get printed. |
-x | The opposite of ‘-nd’—create a hierarchy of directories, even if one would not have been created otherwise. |
-k | After the download is complete, convert the links in the document to make them suitable for local viewing. |
-K | When converting a file, back up the original version with a ‘.orig’ suffix. |
-e robots=off | Specify whether the norobots convention is respected by Wget, “on” by default. This switch controls both the /robots.txt and the ‘nofollow’ aspect of the spec. |
-E | If a file of type ‘application/xhtml+xml’ or ‘text/html’ is downloaded and the URL does not end with the regexp ‘\.[Hh][Tt][Mm][Ll]?’, this option will cause the suffix ‘.html’ to be appended to the local filename. |
--ignore-length | With this option, Wget will ignore the Content-Length header—as if it never existed. |
--no-check-certificate | Don't check the server certificate against the available certificate authorities. Also don't require the URL host name to match the common name presented by the certificate. |
-np | Do not ever ascend to the parent directory when retrieving recursively. |
--cookies=off | Disable the use of cookies. |
--header | Send header-line along with the rest of the headers in each http request. |
-U | Identify as agent-string to the http server. |
Ongelmia
Mikäli arkistoinnin jälkeen tiedostoista löytyy edelleen "wp-login.php@redirect_to=%2Ffoo%2Fbar%2F.html" tapaisia nimiä, määriteltyjen kirjautumiskeksien tiedot ei ole oikein. Ehkä kyseisen hakemisto tulee arkistoida erikseen ja käyttäen toisia keksiarvoja.