TromboneFreakus schreef op dinsdag 01 juli 2008 @ 19:23:
In dat geval zou je dus, als ik het goed begrijp, niet eens de hyperlinks zoals ze in de documenten zelf (en na conversie dus in het CMS) staan te veranderen, omdat ook die hyperlinks immers worden opgevangen door dergelijke htaccess rules? Dat zou ideaal zijn, want juist het grote aantal onderlinge hyperlinks is een reden geweest om tot nu toe niet te converteren.
Nou, mijn idee was dus om te beginnen met één htaccess rule die alles wat op .htm of .html eindigt herschrijft naar een php pagina met lookup functie. Zit je nog wel met de URLs op submappen (waar index.html is weggelaten), die moet je nog apart afvangen.
Oh, om 'permanent redirects' te genereren zou je link naar de PHP lookup pagina 'intern' moeten rewriten, en die PHP pagina moet dan de lookup doen, en dan een 301 header schrijven met de nieuwe link. Of nog beter: er zit ook een functie in Apache waarmee je de URL voor de rewrite kunt laten samenstellen door een extern script, waarna Apache zelf de 301 header genereert. Kijk even
hier in de handleiding onder 'RewriteMap' en dan 'External Rewriting Program'

Belast dit gebruik van htaccess echter de server niet heel erg?
Voorkom ten alle tijde loopende rewrites, want daar is je provider niet blij mee
't Lijkt me verder wel simpel te houden: zo weinig mogelijk rewrite rules, voor de oude URL's één lookup in de database. Minimale belasting lijkt me. 't Kan natuurlijk wat veel tegelijk zijn in 't geval dat er honderd plaatjes in een pagina staan die allemaal tegelijk een rewrite genereren.
Stappenplan
Als ik het goed begrijp, zou dit leiden tot grofweg dit stappenplan...
Een aparte tabel voor de 'nieuwe' URLs lijkt me niet nodig. Je kunt waarschijnlijk de oude URL's wel ergens kwijt in de tabel die voor de artikelen is bedoeld. Daar kun je een SQL lookup op uitvoeren, daarmee heb je het artikel ID te pakken. Als het CMS een functie heeft voor zoekmachinevriendelijke links kun je 's kijken of je het verkregen ID daardoorheen kunt jassen.
Vragen rondom stappenplan
Ad 3) Dit zal moeten gebeuren met een script dat op basis van regular expressions zoekt naar alle hyperlinks in een bestand, deze hyperlinks ook weer volgt, in die bestanden dezelfde analyse uitvoert, enzovoort, enzovoort. Toch?
Voor het importeren van de oude website kun je denk ik het beste gewoon een backup maken naar je eigen computer, en lokaal het script draaien dat de mappen in het filesystem afloopt. Dan weet je zeker dat je alle pagina's hebt, ook als ze niet vanuit de oude menustructuur gelinkt waren.
Je zou in principe, als de rewrite met gekoppelde lookup goed functioneert, de bestaande hyperlinks gewoon moeten kunnen laten staan in de content die je overneemt. Maar het gaat alleen niet werken als het relatieve links zijn, en waarschijnlijk wil je de afbeeldingen ook herorganiseren. Daarvoor moet je inderdaad wel wat greppen en/of later bijwerken. Bovendien denk ik dat de Googlebot het niet waardeert als veel interne links van de website een 301 geven, dus gaandeweg zul je de links toch moeten vernieuwen denk ik. Of je kiest ervoor de oude links permanent te integreren in de nieuwe structuur, zodat je geen 'permanent redirects' hoeft te gebruiken.
Ad 4) Hoe moet dit? Kan in htaccess naar bijvoorbeeld een PHP-script verwezen worden dat deze verwijzingen verder uitzoekt? Of kan dit in htaccess zelf eenvoudig? Ik zie bijv.
hier wel een concrete tip, maar in de
comments wordt daar opgemerkt dat dit beter niet in PHP maar beter in htaccess gedaan kan worden.
Oh, dat heb ik inmiddels dus al aangehaald, zie hierboven.
Ad 5) MySQL ondersteunt geen zoeken/vervangen conform regular expressions toch? Hoe zou je dan alle links kunnen vervangen? De enige keer staat er immers
en de volgende keer
Je kunt grootschalige zoek- en vervang acties met wat handwerk er tussendoor waarschijnlijk makkelijker lokaal doen met een editor (bv. TextWrangler voor de Mac).
Het kan voor een deel vooraf, met de uitgebreide vervang-functie kun je in één keer een grep uitvoeren op alle html-bestanden in een map. Zo kun je 't vast opschonen voordat je 't importeert.
Achteraf kun je de artikelen ook en-masse bijwerken door een SQL dump van die tabel te maken, die lokaal te editten en daarna weer terug uit te voeren op de server. Let wel op eventuele problemen met codetabellen (Latin1, UTF). Of zorg ervoor dat je vooraf met een scriptje of een editor de vreemde tekens in HTML-entiteiten omzet.