kolimine, ümbersuunamine ja htaccess

Eelmisest postitusest nähtub minu suur vastumeelsus linkrot’i suhtes – veebiplatvormi vahetuse, olulise ümberseadistamise jms puhul tuleks näha veidi vaeva ja teha nii, et otsimootorist või talletatud lingiga saabuv kasutaja (samuti otsimootor ise :-) saaks 301 Moved Permanently abil ümber suunatud sinna kuhu ta minna tahtis ehk siis uuele ja toimivale lingile.

Osa neist ümbersuunamistest on lihtsalt tuletatavad – kataloogimuudatused, id=123, Google Webmaster Tools’ist sisenevad lingid jne – aga kindlasti jääb midagi ka 2silma vahele ning siis ei aita muu kui vaadata milliste URLide peale 404-errorit serveeritakse ning korduma kippuvad vead ära lappida. WordPressile on mitmeid pluginaid mis seda protsessi hõlbustavad, mulle meeldib Redirection mille abil saab ka tavakasutaja kohe ümbersuunamise korraldada. Ja kuigi Redirection toetab ka .htaccess’i kasutamist (kiirem kui WordPressi sisemised vahendid) on mul tavaks keerukamaid suunamisi otse .htaccessis korraldada.

.htaccess on mitmete veebiserverite puhul kasutatav konfiguratsioonifail mis lubab teha lokaalseid muudatusi serveri seadistustes, mõjudes .htaccess’i sisaldavale kataloogile ja selle alamkataloogidele; punkt failinime alguses tähendab peidetud faili, harilikult saab FTP-programmi seadistada neid näitama, OSX jaoks leiab õpetused ja automaatori

Kui WordPressil on seadistatud permalingid näeb .htaccessi sisu välja selline (viimase reaga kehtestatakse Mediatemple majutuses PHP5 kasutamine – ehk siis on tegu failiga mille kallal mässavad erinevad tegelased):

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
AddHandler php5-script .php

Lisades WP Super Cache või W3 Total Cache on tulemus oluliselt pikem ning vähemalt viimane tekitab täiendavaid .htaccess’e ka mõningatesse alamkataloogidesse. Kuna käsitsi lisatud suunamised võiksid käia üle kõigist programmilistest tuleks need panna faili algusesse, näiteks selliselt:

# BEGIN tehnokratt.net
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
# siia kohta käivad kõik alljärgnevad näited
</IfModule>
# END tehnokratt.net

Alustaks millestki lihtsamast, suunaks mõned URLid lihstalt ümber kasutades rewrite’i (need lihtsamad saaks ka lihtsalt redirectida… aga kasutame parem algusest peale rewrite’i mis lubab teha põhjalikumat teisendust kus vaja). Esimene rida suunab esilehele päringu mis hakkas mind 404-logis segama (ilmselt soovis keski/miski leida Windowsi serverit), teine rida suunab vana veebi RSSi aadressi kenasti Feedburnerisse ümbes:

RewriteRule ^netlogon$ / [R=301,NC,L]
RewriteRule ^xml/rss.xml$ http://feeds.feedburner.com/tehnokratt/pets [R=301,NC,L]

Siinkohal ^ tähistab URLi pathi algust ja $ lõppu, NC ehk no case samastab suured ja väiksed tähed ning L ütleb, et selleks korraks on küll asendatud. Mäletamist mööda on .htaccess nende parameetrite osas suht noriv, nt ilutühikute lisamine [R=301,NC,L] vahele võib kõik nässu keerata.

Kui tahad põhjalikumat õpetust, siis minu püsi-bookmarkide hulgas on Stupid htaccess Tricks,  .htaccess tips and tricks ja more .htaccess tips and tricks. Kogu redirectimise teema lahtikirjutus neile kes lugeda viitsivad on The anatomy of a server sided redirect: 301, 302 and 307 illuminated SEO wise. Eriline au ja kuulsus saavad mõistagi saatma neid, kes endale ka regexi selgeks teevad, nt regular-expressions.info abil :-)

Edasi … vanast veebist üle toomisega jäid artiklite-uudiste numbrid samaks, aga muutus oluliselt see kuidas nende poole numbriliselt pöördutakse:

RewriteRule ^stories/storyreader\$([0-9]+) /index.php?page_id=$1 [R=301,NC,L]
RewriteRule ^discuss/msgreader\$([0-9]+) /index.php?p=$1 [R=301,NC,L]

Ehk siis pärast storyreader$ olevad numbrid (aga mitte seda, mis võib tulla pärast numbreid) antakse edasi page_id’na. Sama lahendus tiba klassikalisemaks juhuks ehk kui lehenumber on antud parameetrina võiks välja näha järgnev (arvestades võimalust, et id ei pruugi olla esimene parameeter… ohjah, seda saab vist ka ilusamalt teha aga hetkel on kell liiga öö et katsetada, lisaks tuleks välistada olukord kus see takistab mõnede id= kasutavate admin-pluginate toimimist):

RewriteCond %{QUERY_STRING} ^id=([0-9]+) [OR]
RewriteCond %{QUERY_STRING} &id=([0-9]+)
RewriteRule ^(.*) /?page_id=%1 [R=301,NC,L]

Olgu lisatud, et kui vanast mitte-WordPressi veebist üle tulevad inimloetavad URLid ei vasta WordPressi hierarhiale st enne oli /meeseep ja nüüd /tooted/seebid/meeseep siis selline ümbersuunamine toimub täiesti automaagiliselt – seda suunamist võib muideks ka teadlikult kasutada, nt avaldades reklaamis lühema URLi. Suunatakse muideks ka poolikud URLid, nt /mees -> /tooted/seebid/meeseep (mis võib kohati kukalt kratsima võtta, nt kui oled mõne lehe kustutanud ja külastajad täiesti suvalisele lehele sattuma hakkavad).

WordPress jälgib automaatselt ka postituste URLide ehk slugide muutumist ning suunab vanad uutele ümber. AGA ainult postituste puhul, lehe-slugi muutumise äratabamiseks on vaja Redirection’it.

Ja üks jupike veel, juhuks kui peaks olema vajadus iseleiutatud taksonoomia-slugid tagasi ametlikeks muuta:

RewriteRule ^teemad/(.*)$ /category/$1 [R=301,NC,L]
RewriteRule ^tagsonoomia/(.*)$ /tag/$1 [R=301,NC,L]

Ja veel mõned levinud näited, juhuks kui on vaja hüpata üle mõnest sisustamata alamlehest, muutub lehe permalink (nt toote nimi) või on vaja harmoniseerida üleslaetud dokumentide nimesid viies need mh kenasti otsimootoritele optimeeritud kujule:

RewriteRule ^alamleht[/]?$ /alamlehe/alamleht/ [R=301,NC,L]
RewriteRule ^tooted/meeseep/? /tooted/mesimummuseep/ [R=301,NC,L]
RewriteRule ^upload/files/mingi.pdf^ /misc/ilusa-nimega.pdf [R=301,NC,L]

Tänaseks kõik. Vigade parandus teretulnud, samuti kui kellelgi peaks olema kogemust mod_geoip kasutamisel – mis oleks, kui teeks rewrite’i mis suunab kõik ilma refererita esilehele saabunud Eesti IPga külastajad kenasti /et lehele? Või on miski muu hea nipp eristamaks äsja saabunud külastajaid neist, kes teadlikult ingliskeelse esilehe valivad? (ja sama ülesanne ka puhuks, kui avaleht on vaikimisi eestikeelne ja tahaks muumaalased saata ingliskeelsele)

Postitatud rubriiki wordpress märksõnaga , , , , . Talleta püsiviide. Kommenteerimine ja trackback-viidete lisamine ei ole lubatud.

4 Kommentaarid

  1. Ahto Truu
    Lisatud 21. okt. 2010 kell 22:45 | Püsiviide

    Kas keele valikuks poleks sihipärasem vaadata, mida saabuja brauser Accept rea peal ütleb? Ei tea küll, kui paljud kasutajad oma brauseris keele-eelistused ära kirjeldanud on…

    • Lisatud 22. okt. 2010 kell 05:46 | Püsiviide

      See brauserikeel on ikka väääga tambov: tehnokratt.net külastajatest on Google Analytics andmetel Eestist 93%, aga keel on et vaid 40% (52% en-us, 3% en-gb)…

  2. Lisatud 23. okt. 2010 kell 21:22 | Püsiviide

    Olen ise lähenemisse, et otsustan kasutaja eest, skeptiliselt suhtunud ning seega pole igasugu geo-, IP- ja/või UA-string tuvastamise tehnikaid kasutanud. Aga oma järjehoidjatesse olen siiski märkinud:
    – Jon’s Geolocation Plugin: http://uxd.im/96TupJ
    – IP2Location Tags: http://uxd.im/aahMvF (toetub ip2location.com andmetele)

    • Lisatud 25. okt. 2010 kell 09:07 | Püsiviide

      Need pakuvad geoip infot lehe kuvamise käigus, mind huvitaks ennekõike tegevus ENNE lehekuvamist. Ja ma olen nõus, et kasutajate eest pole mõtet otsustada – samas direct-kasutajatele tiba parema kogemuse pakkumine võiks ju olla abiks (otsimootorid saadavad loodetavasti nii ehk naa õigekeelsele lehele).