Ooh, ilmetty Harri J. 陳! GPE, N800 ja erminig: Google muistaa ja tabletti synkkaa
Aug 06

Tänään avatun wikimme viime hetken säätelyissä meinasi mennä hermot. Muuten MediaWiki toimi oikein kiltisti, mutta lyhyet osoitteet tuottivat ongelmia.

Ongelmia aiheutti assemblix.netin WAMP-alusta. Palvelu pyörii siis Windows Server 2003:lla, Apachella ja MySQL:llä.

Linuxin ja Windowsin välillä ei yleensä ole ollut suuria eroja, mutta nyt niitä aiheutti tiedostopolun kaksoispiste. Kaikki MediaWikin erikoislinkithän sisältävät niitä, esimerkiksi /Ohje:Ohje.

Niin kauan ongelmia ei ollut, kun käytimme puoli-pitkää osoitemuotoa /index.php?title=Ohje:Ohje. Lyhyimpään muotoon pääsy ei kuitenkaan luonnistunut, sillä Windows alkoi valittaa kielletyistä merkeistä:

(20024)The given path misformatted or contained invalid characters: Cannot map GET /index.php/Assemblix:Ajankohtaista HTTP/1.0 to file, referer: http://wiki.assemblix.net/LAMP

Ymmärsin, että vika liittyi kaksoispisteeseen joten aloin kehittämään mod_rewritella ratkaisua, jotta kielletty merkki ei päätyisi tiedostojärjestelmälle näkyviin kutsuihin.

Apachen mod_rewrite on oma tieteenhaaransa, eikä väitä sitä läheskään ymmärtäväni. Rewrite-loggauksen, foorumien lueskelun, yrityksen ja erehdyksen kautta tajusin kuitenkin miten vian voi ohittaa.

Normaalisti olisin kohdistanut uudelleenkirjoitussäännön hakemistotasolle, eli joko .htaccessiin ja httpd.conf:in Directory-elementtiin. Tämä muoto ei kuitenkaan toimi Windowsissa:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?title=$1 [L,QSA]

En nyt aivan tarkkaa syytä tähän tiedä, enkä oikeastaan sitäkään, miksi seuraava muoto toimii. Eli kun muutin hieman sääntöä ja siirsin sen globaaliin kontekstiin, ei virheitä enää tullut:

RewriteCond c:/htdocs%{REQUEST_FILENAME} !-f
RewriteCond c:/htdocs/%{REQUEST_FILENAME} !-d
RewriteRule ^/(.*)$ /index.php?title=$1 [L,QSA]

Tätä ennen olin yrittänyt erinäisiä eksoottisia temppuja, mm. kaksoispisteen sisältävien osoitteiden erikoiskäsittelyä:

RewriteCond %{REQUEST_URI} ^/(.*)MediaWiki: [OR,NC]
RewriteCond %{REQUEST_URI} ^/(.*)Talk: [OR,NC]
RewriteCond %{REQUEST_URI} ^/(.*)Template: [OR,NC]
RewriteCond %{REQUEST_URI} ^/(.*)User: [OR,NC]
RewriteCond %{REQUEST_URI} ^/(.*)Special: [NC]
RewriteRule ^(.*)$ - [S=nnnn]

Kyseessä on kuulemma vanha vika Windows-Apachessa, johon ei ole vieläkään saatu korjausta.

Lisätietoa mm. Apache Lounge: Error in MediaWiki with Apache 2.2.X and PHP 5.1.X ja
MediaWiki Users: (20024)The given path misformatted or contained invalid characters:.

Leave a Reply