Hakukoneoptimointi

Hakukoneoptimointia.com tarjoaa avaimet menestykseen niin pienemmille kuin suuremmillekin yrityksille. Alan paras osaaminen vain yhteydenottosi päässä.
Ota yhteyttä

.htaccess ja Mod_Rewrite

Mod_Rewrite on Apache -palvelimen moduuli, joka sallii osoitteiden uudelleenkirjoituksen .htaccess (Hypertext Access) -tiedoston avulla. Tässä artikkelissa käymme läpi Mod_Rewrite:n käytön dynaamisten osoitteiden muuttamisessa staattisiksi. Pyrimme näyttämään suoraan miten mikäkin tehdään jotta homma pysyy selkeänä. Jotta asia kuitenkin avautuisi mahdollisimman monelle, suosittelemme tutustumaan tähän .pdf -tiedostoon , joka sisältää muun muassa muutamia nk. Regular Expression -syntakseja, joita Mod_Rewrite käyttää.

.htaccesin suojaaminen

Ensimmäisenä tehtävänä on, tottakai, itse .htaccess -tiedoston suojaaminen ulkopuolisten katseilta. Mikäli .htaccess tiedostossasi ei ole suojausta valmiina, lisää siihen seuraavaa:

<Files .htaccess>
order allow,deny
deny from all
</Files>

Dynaamisen URL:n uudelleenkirjoitus staattiseen muotoon

Olemme saaneet yhteydenottoja lukuisilta pienyrityksiltä, jotka haluaisivat sivustoilleen parempaa hakukonenäkyvyyttä. Monilla näistä pienyrityksistä on nettikauppa, jonka tuoteryhmien/tuotteiden osoitteet on kirjoitettu dynaamiseen muotoon, esimerkiksi http://www.sivusto.com/index.php?tuote=120. Tässä on muutama huono puoli; Hakukoneet eivät vieläkään indeksoi dynaamisia sivuja niin hyvin kuin staattisia. Lisäksi sivun koko saattaa olla jopa 30% isompi verrattuna staattisilla osoitteilla varustettuun sivuun, jos se sisältää runsaasti pitkän “hännän” omaavia dynaamisia osoitteita. Täytyy myös muistaa, että staattiset osoitteet (esim. tiedosto.html) ovat myös paljon käyttäjäystävällisempiä.

Niinpä haluamme muuttaa osoitteet hakukoneystävälliseen muotoon (esim. tuote120.html). Lisäämme .htaccess tiedostoon seuraavaa (# = kommentti):

# Käynnistää Rewrite enginen. Tämä täytyy kirjoittaa aina ennen Rewrite -sääntöjä.
RewriteEngine on

# Sallii osoitteiden muokkauksen. Pakollinen, mikäli ei ole automaattisesti päällä
Options +FollowSymlinks

# Hakemisto, jota manipuloimme
RewriteBase /

# Varsinainen osoitteen uudelleenkirjoitus.
RewriteRule ^tuote([0-9]+)\.html$ /index\.php?tuote=$1 [L]

Jossa $1 (1. muuttuja) poimii tuotteen numeron. [0-9] poimii 1. muuttujan antaman luvun ja merkitsee mitä tahansa numeroa nollasta yhdeksään. + taasen merkitsee, että numeroita on yksi tai enemmän. [L] merkitsee viimeistä Rewrite sääntöä (ks. taulukko)

Jos taas tuotteen dynaaminen osoite sisältää aakkosia (esim. http://www.sivusto.com/index.php?tuote=Vehkeet), käytämme seuraavaa:

RewriteRule ^([a-zA-Z]+)\.html$ /index\.php?tuote=$1 [L]

Jossa taas [a-zA-Z] merkitsee aakkosia joko isolla tai pienellä kirjoitettuna, yksi tai enemmän jompaa kumpaa. Tuloksena saamme osoitteen Vehkeet.html.

Jos dynaaminen osoite sisältää sekä kirjaimia, että numeroita (esim. http://www.sivusto.com/index.php?tuote=aa13BE23), voimme esimerkiksi käyttää seuraavaa:

RewriteRule ^([a-zA-Z0-9]+)\.html$ /index\.php?tuote=$1 [L]

Tuloksena saamme tiedostonimen a1B2.html.

Mikäli osoitteet halutaan hakemistoiksi, voidaan .html korvata koodissa sekä / -merkillä, että jättää se kokonaan pois.

RewriteRule ^([a-zA-Z0-9]+)/$ /index\.php?tuote=$1
RewriteRule ^([a-zA-Z0-9]+)$ /index\.php?tuote=$1 [L]

Tässä on syytä muistaa, että sinun täytyy lisätä jokaiseen Rewrite -sääntöön (joka koskee hakemistojen osoitteita) kaksi vaihtoehtoa (kauttaviivalla ja ilman), tai sitten kirjoittaa sääntö, joka lisää kauttaviivan automaattisesti ja uudelleenohjaa aina kauttaviivalla varustettuun osoitteeseen:

RewriteRule ^([a-zA-Z0-9]+)$ /$1/ [R=301]
RewriteRule ^([a-zA-Z0-9]+)/$ /index\.php?tuote=$1 [L]

Jos et menettele näin, voi esimerkiksi kauttaviivalla varustettu osoite olla toimiva, kun taas ilman kauttaviivaa oleva antaa virhesivun.

Useilla muuttujilla varustetut dynaamiset osoitteet

Vaikka dynaamisessa osoitteessa olisi useita muuttujia, tehdään Mod_Rewrite samaan tapaan kuin ylläolevissa esimerkeissä.

Oletetaan, että osoite on http://www.sivusto.com/index.php?tuoteryhma=Vehkeet&tuote=23. Siispä .htaccesiin:

RewriteRule ^([a-zA-Z]+)/tuote([0-9]+)\.html$ /index\.php?tuoteryhma=$1&tuote=$2 [L]

Joka antaa tulokseksi http://www.sivusto.com/Vehkeet/tuote23.html. Muuttujia voi lisätä niin paljon kuin sielu sietää, kunhan muistaa edetä järjestyksessä ($1,$2, $3 jne.).

Myös tietyn tuotteen nimen sisällyttäminen osoitteeseen (esim. nettikauppojen käyttämissä alustoissa) on mahdollista, mutta se vaatii jo muiden tiedostojen muokkaamista, joten emme lähde tässä käsittelemään sitä asiaa sen enempää.

Luonnollisesti kun Mod_Rewrite on tehty, täytyy uudet osoitteet myös sijoittaa sivurakenteeseen. Tämä todennäköisesti vaatii sivujen osoitteiden määräävän koodinpätkän paikantamisen PHP- koodista ja sen muokkaamista. Lisäksi kannattaa tehdä uudelleenohjaus vanhoista, dynaamisista osoitteista uusiin staattisiin osoitteisiin tuplasisällön välttämiseksi.

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\?tuoteryhma=([a-zA-Z0-9]+)&tuote=([a-zA-Z0-9]+)
RewriteRule ^index\.php$ /%1/tuote%2\.html? [R=301,L]

Tämä siis ohjaa esim. http://www.sivusto.com/index.php?tuoteryhma=Vehkeet&tuote=23 -> http://www.sivusto.com/Vehkeet/tuote23.html kunhan muuttujina vain ovat “tuoteryhmä” ja “tuote”. Kuten tästä esimerkistä näet, voi Mod_Rewrite olla myös konditionaalista.

Hankalaa, eikö totta?

Ei oikeastaan, sillä koodi kyllä aukeaa jokaiselle, joka vähänkään viitsii tutkia sitä ja yhdistellä asioita toisiinsa. Ei kukaan ole seppä syntyessään ja testaamalla oppii. Muista kuitenkin ottaa varmuuskopiot aina ennen kuin rupeat muokkaamaan sivustosi tiedostoja.

Lisää .htaccess jippoja tulossa piakkoin..

40 kommenttia »

  1. Jani kommentoi että,

    21.02.2006 @ 19:22

    Kiitos, erittäin hyödyllinen.

  2. jukkis kommentoi että,

    23.02.2006 @ 19:22

    Kiitos. tälläistä olen ettinyt pitkään.

  3. sähköpaimen kommentoi että,

    24.02.2006 @ 19:22

    Lisäksi mikäli molemmat osoitteenkirjoitustavat www.sivusto.com ja pelkkä sivusto.com ovat käytössä, kannattaa lisätä .htaccessiin rivit:

    RewriteCond %{HTTP_HOST} ^sivusto\.com$ [NC]
    RewriteRule ^(.*)$ http://www.sivusto.com/$1 [R=301,L]

    (tämä siis uudelleenohjaa sivusto.comista www.sivusto.comiin, sama toimii toki toisinkin päin)

    Miksi näin? Huomasin sitemapin kanssa leikkiessäni, että google ymmärtää nuo kaksi osoitteenkirjoitustapaa kokonaan erillisinä saitteina. Ne yhdistämällä eivät hakutulokset ja pagerank suotta jakaudu “kahden saitin” kesken.

  4. Hakukoneoptimointia kommentoi että,

    24.02.2006 @ 19:22

    On toinenkin tapa:

    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www\.sivustoesimerkki\.com [NC]
    RewriteRule ^(.*)$ http://www.sivustoesimerkki.com%{REQUEST_URI} [R=301,L]

    Itse käyttäisin esimerkissäsi www:tä myös RewriteCondissa (tuntuu ja näyttää ihmeelliseltä www:n kanssa, mutta toimii), sillä sen puuttuminen aiheuttaa loputtoman uudelleenohjauskierteen (Näin ainakin kokeilemalla).

    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www\.sivustoesimerkki\.com$ [NC]
    RewriteRule ^(.*)$ http://www.sivustoesimerkki.com/$1 [R=301,L]

    Toisaalta tämän pitäisi pikaisella kokeilulla toimia:

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^sivustoesimerkki\.com [NC]
    RewriteRule (.*) http://www.sivustoesimerkki.com/$1 [R=301,L]

    Muutaman merkin ero, mutta tekee sen toimivaksi.

    Kirjoittelin kaksoissisällöstä joskus syksyllä, jolloin tuosta myös mainitsin, joten en katsonut tarpeelliseksi lisätä sitä uudelleen.

    Edit:
    Muistakaa aina testata kunnolla, että modit toimivat sivuillanne. Vaikka yhdellä toimii yksi “temppu”, ei se välttämättä toisella toimi.

    Edit 2: Lisää edittiä :)

    Edit 3: Typo pois koodista

  5. Hakukoneoptimointia kommentoi että,

    24.02.2006 @ 19:22

    Tuolla kannattaa testata Mod_Rewriten toimivuutta:

    http://gsitecrawler.com/tools/server-status.aspx

  6. sähköpaimen kommentoi että,

    24.02.2006 @ 19:22

    Itselläni onkin koko homma toisinpäin, eli kaikki ohjautuu ilman-www:tä-osoitteeseen. Googlella oli huomattavasti nykyaikaisempi käsitys sivustani ilman www:tä, joten siksi moinen. Siis:

    RewriteCond %{HTTP_HOST} ^www\.sivusto\.com$ [NC]
    RewriteRule ^(.*)$ http://sivusto.com/$1 [R=301,L]

    Tällöin uudelleenohjauskierteeltä käsittääkseni vältytään? :)

  7. Hakukoneoptimointia kommentoi että,

    24.02.2006 @ 19:22

    Kyllähän tuo näyttäisi toimivan. Tuo huutomerkki tuossa RewriteCondissa esimerkeissäni poistaa kyseisen URLin mahdollisuuden.

    RewriteCond %{HTTP_HOST} !^www\.sivustoesimerkki\.com$ [NC]

    eli www.sivustoesimerkki.com luetaan pois, kaikki muu ohjautuu määriteltyyn versioon.

  8. Ola kommentoi että,

    27.02.2006 @ 19:22

    Pystyykö .htaccessilla jättämään muuttujia kokonaan pois lyhennetystä urlista? Esim: . http://www.sivusto.com/index.php?tuoteryhma=Vehkeet&tuote=23 -> http://www.sivusto.com/tuote23.html

  9. Hakukoneoptimointia kommentoi että,

    27.02.2006 @ 19:22

    Tokii, esim:

    RewriteRule ^tuote([0-9]+)\.html$ /index\.php?tuoteryhma=Vehkeet&tuote=$1 [L]

  10. jari huuskonen kommentoi että,

    28.03.2006 @ 19:22

    Moi, tama ei nyt varsinaisesti liity optimointiin, mutta kysynpa nyt sitten kuitenkin, miten tehda seuraavanlainen uudelleen ohjaus.
    www.sivusto.com/vehkeet/vehkeet2.html siten etta selaimessa ei nay muutakuin www.sivusto.com ja kaikki muu sala nakyy ja toimii tuon url_n alla.

    Toinen kysymys, apachen sivuilta saa sen kasityksen etta uudelleen ohjausta htaccess kautta tulisi valttaa, sen aiheuttaman hitauden vuoksi: pitaneeko paikkansa?

  11. jari huuskonen kommentoi että,

    28.03.2006 @ 19:22

    Muotoilen kysymykseni uudelleen eli kaikki www.sivusto.com/* rewritetaan siten etta selaimessa nakyy vain ja ainoastaan www.sivusto.com

  12. Hakukoneoptimointia kommentoi että,

    28.03.2006 @ 19:22

    Näin äkkiseltään mietittynä en usko, että se tulee onnistumaan. En ainakaan ole koskaan kuullut kenenkään tekevän näin. Ehkä yhteistyössä PHP:n kanssa jotakin sellaista saisi värkättyäkin.Tosin, olisiko sellainen järkevää hakukoneita ajatellen?

    .htaccess uudelleenohajukset toimivat vallan hyvin normaaleilla sivustoilla. Tietysti tiedostokoon kasvaessa myös vauhti hidastuu, mutta siinä vaiheessa siinä olisi jo tuhansia rivejä. Jokatapauksessa normaali käyttäjä ei vauhdissa yleensä eroja huomaa tehtiin uudelleen ohjaukset sitten Mod_Rewritella tai jollain muulla tavalla.

    Lähinnä hidastelua tulee siinä, jos .htaccesiin on listattu esimerkiksi hirveä määrä “bannittuja” ip -osoitteita

  13. Jari Huuskonen kommentoi että,

    31.03.2006 @ 19:22

    Moi, tälläinen pähkinä tällä kertaa. Eli apassi ja reverse proxy

    RewriteCond %{HTTP_HOST} ^www\.sivusto\.com\:83
    RewriteRule ^/(.*)$ /forums/ [R]
    RewriteRule ^/forums$ http://www.sivusto2.com/forums/ [L,P]
    ProxyPassReverse /forums/ http://www.sivusto2.com/forums/

    Eli seuraavaa yritetään: apassin kautta reverse proxy kaikki www.sivusto.comiin tulevat pyynnöt käännetään /forums/ hakemistoon lokaalisti, minkä jälkeen www.sivusto.com/forums/ uudelleen ohjataan www.sivusto2.com/forums/ osoitteeseen ja käyttäjälle näkyy www.sivusto.com/forums url mutta www.sivusto2.com/forums/ sisältö.

    Osaako joku kertoa mikä yllä olevassa on vikana. Tämähän onnistuu helpostikin redirecmatch, proxypass ja proxypassreversen kanssa.
    Mutta erinäisistä uudelleen ohjauksista johtuen ylläoleva olis parempi vaihtoehto.

    Tällä hetkellä tuo menee ikuiseen loppiin ja yrittää ohjata /forums/ –> localiin /forums/ jonka jälkeen palaa taas takaisin tähän sääntöön ja looppi on valmis.

  14. Hakukoneoptimointia kommentoi että,

    04.04.2006 @ 19:22

    Pitääpä huomenissa tuorein silmin katsoa tuota esimerkkiäsi, mutta:

    Äkkiseltään katsottuna näyttää, että tämä aiheuttaa loopin:

    RewriteRule ^/(.*)$ /forums/ [R]

    eli kaikki pyynnöt läheteään /forums/ polkuun (myös itse /forums/ = loop). Sinun täytyy siis jättää /forums/ säännöstä pois.

  15. Jari Huuskonen kommentoi että,

    05.04.2006 @ 19:22

    jep siinä loopin syy.

    tämä toimiii
    RewriteCond %{HTTP_HOST} ^www\.sivusto\.com\:83
    RewriteRule ^/forums$ http://www.sivusto2.com/forums/ [P]
    ProxyPassReverse /forums/ http://www.sivusto2.com/forums/

    sillä erolla että sivusto2.comin sisältö näkyy käyttäjälle
    www.sivusto.com urlista ilman /forums/ loppua.
    Kun vielä saisi tuon koko hässäkän näkymään www.sivusto.com/forums/ alta.

    ja tässä mitä yritän tehdä. Helpommin.

    RedirecMatch 301 ^/$ /forums/
    ProxyPass /forums/ http://sivusto2.com/forums/
    ProxyPassReverse /forums/ http://sivusto2.com/forums/

  16. Jari Huuskonen kommentoi että,

    05.04.2006 @ 19:22

    Korjaus
    RewriteCond %{HTTP_HOST} ^www\.sivusto\.com\:83
    RewriteRule ^(.*)$ http://www.sivusto2.com/forums/ [P]
    ProxyPassReverse /forums/ http://www.sivusto2.com/forums/

    eli ekasta rulesta ^/forums$ vaihtuu

    ^(.*)$

    jolloin kaikki ohjataan luonnollisesti

  17. Jani kommentoi että,

    07.04.2006 @ 19:22

    Morjensta. Paljon hyviä vinkkejä joita jo on käytössä. Tämä kuitenkin rupesi tökkimään.

    www.sivusto.com/mark.php?tuote=1&kpl=0&id=kukka_purkki

    pitäisi saada muotoon www.sivusto.com/kukka-purkki

    Tuo kukka-purkin väliviiva tökkii. Eli alaviiva pitäisi saada väliviivaksi.

    Vai onko tuolla väliviivalla niinkään suurta roolia missä se sijaitsee jos ajatellaan hakukoneita? Monesti olen kyllä huomannut että väliviivalla olevat sivut sijoittuvat paremmin ja on url ollut hakutuloksissa lihavoituna/korostettuna verrattuna jos url on alaviivalla. Kokemuksia kellään?

  18. Qin kommentoi että,

    11.04.2006 @ 19:22

    Tein tälläisen viritelmän:

    RewriteRule ^([a-zA-Z0-9]+)$ /demo/index\.php?page=$1&sub=$2&action=$3 [L]

    Sain toimimaan muodossa www.saitti.com/joo

    Mutta heti kun laitan toisen muuttujan kehiin, tässä tapauksessa “sub” niin tulee jo erroria eikä uudelleenohjaus toimi. Enkä keksi miksi. Olisiko jollakin neuvoa tähän?

  19. Hakukoneoptimointia kommentoi että,

    13.04.2006 @ 19:22

    Jani:

    RewriteRule ^([a-zA-Z0-9]+)-([a-zA-Z0-9]+)\.html$ /mark\.php\?tuote=0&kpl=1&id=$1_$2
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /mark\.php\?tuote=0&kpl=1&id=([a-zA-Z0-9]+)_([a-zA-Z0-9]+)
    RewriteRule ^mark\.php$ /%1-%2.html? [R=301,L]

    en tosin testannut, mutta pitäisi toimia. Kerro toki jos ei pelaa.

    Ala- ja väliviivoista artikkelia on täällä

  20. Jani kommentoi että,

    15.04.2006 @ 19:22

    Sitten olisi vielä yksi ongelma. Käytän tämmöistä

    RewriteRule ^uudet/([^/]+)\/$ /uudetkoodit/index\.php?esi=0&kpl=1&id=$1
    RewriteRule ^uudet/([^/]+)$ /uudetkoodit/index\.php?esi=0&kpl=1&id=$1

    Eli, sivujen title muodostuu id=$1 avulla. id=$1:ssä on kuitenkin muutamassa tapauksessa & merkki. Jos id=$1 on esimerkiksi kukka _&_purkki niin lyhennetyssä urlissa tulostuu titleen vain & merkkiin asti sanat, tässä tapauksessa siis kukka. Pitkällä urlilla toimii normaalisti. Ja kaikki muut “välimerkit” toimivat normaalisti kuten ´ / jne..

    Miten tuota tarvii muuttaa että toimii oikein ?

  21. Hakemistot kuntoon kommentoi että,

    15.04.2006 @ 19:22

    […] On parempi pysyä vain yhdessä tavassa ja huolehtia siitä, että kaikki sivuston linkit linkittävät juuri samaan osoitteeseen. Suosittelemme käyttämään kauttamerkkiä aina, mikäli mahdollista (/hakemisto/). Vielä parempi jos voit liittää osoitteeseen automaattisesti kauttamerkin esimerkiksi Mod_Rewriten avulla tai muuten uudelleenohjata muut mahdolliset tuplasisältöä aiheuttavat osoitteet kauttaviivalla varustettuun. […]

  22. Hakukoneoptimointia kommentoi että,

    15.04.2006 @ 19:22

    Qin:

    Sinun täytyy lisätä yhtä paljon regexpsejä kuin muuttujiakin, eli

    RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/$ /demo/index\.php?page=$1&sub=$2&action=$3 [L]

    Jani:

    Pitää illalla oikein ajan kanssa miettiä tuota sinun ongelmaasi.

  23. Hakukoneoptimointia kommentoi että,

    16.04.2006 @ 19:22

    Jani:

    Kokeile:

    RewriteRule ^uudet/([a-zA-Z0-9_&]+)/$ /uudetkoodit/index\.php\?esi=0&kpl=1&id=$1

    tai

    RewriteRule ^uudet/([a-zA-Z0-9_]+)&([a-zA-Z0-9_]+)/$ /uudetkoodit/index\.php\?esi=0&kpl=1&id=$1&$2

    Luulenpa kuitenkin, että uudelleenkirjoituksessa kyse on laittomasta merkistä muuttujassa (&). Eli todennäköisesti joudut muokkaamaan joko PHP-koodia tai poistamaan & merkit tuotteiden osoitteista.

    Uudelleenohjaus saadaan toimimaan myös näin:

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /uudetkoodit/index\.php\?esi=0&kpl=1&id=([a-zA-Z0-9_&]+)
    RewriteRule ^uudetkoodit/index\.php$ /uudet/%1/? [R=301,L]

    Eli koko litania vaikkapa:

    RewriteRule ^uudet/([a-zA-Z0-9_&]+)/$ /uudetkoodit/index\.php\?esi=0&kpl=1&id=$1
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /uudetkoodit/index\.php\?esi=0&kpl=1&id=([a-zA-Z0-9_&]+)
    RewriteRule ^uudetkoodit/index\.php$ /uudet/%1/? [R=301,L]

    Edit: Virheet pois

    Edit2: muokkasin tuota sinulle aiemmin antamaani esimerkkiä (uudelleenkirjoitus unohtui kokonaan matkasta).

  24. Jani kommentoi että,

    17.04.2006 @ 19:22

    Kiitos vain avusta, sain lopulta toimimaan kun muuttelin PHP-koodit sopivaksi.

  25. Seppo kommentoi että,

    26.04.2006 @ 19:22

    En oikein ymmärrä koko systeemiä! Voisiko joku laittaa tästä esimerkin.
    /sivu.php?id=23 tuosta pitäisi saada /sivu/23

  26. Hakukoneoptimointia kommentoi että,

    02.05.2006 @ 19:22

    RewriteEngine on
    RewriteRule ^sivu/([0-9]+)/$ /sivu\.php\?id=$1 [L]
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /sivu\.php\?id=([0-9]+)
    RewriteRule ^sivu\.php$ /sivu/%1/? [R=301,L]

    Jossa ensimmäinen RewriteRule kirjoittaa osoitteen staattiseen muotoon ($1=mikä tahansa numerosarja). RewriteCond taas määrittelee missä tapauksessa uudelleenohjaus tehdään. Viimeinen RewriteRule toteuttaa uudelleenohjauksen.

    Edit: korjattu typotus

  27. Seppo kommentoi että,

    11.05.2006 @ 19:22

    Eipä toimi yllä mainitulla. Tulee vain “Object not found! Error 404″

  28. Hakukoneoptimointia kommentoi että,

    11.05.2006 @ 19:22

    Eipä tietenkään toimi kun typotin tuosssa ylemmässä. Jäi uudelleenkirjoitukseen .html mukaan… My Bad…

    Eli siis:

    RewriteRule ^sivu/([0-9]+)/$ /sivu\.php\?id=$1 [L]
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /sivu\.php\?id=([0-9]+)
    RewriteRule ^sivu\.php$ /sivu/%1/? [R=301,L]

  29. Seppo kommentoi että,

    22.05.2006 @ 19:22

    Eipä se toimi vieläkään. Heittää 404, kaikki pitäisi kyllä omasta mielestä olla kohallaan mutta ei vaan toimi.

  30. Poke kommentoi että,

    23.05.2006 @ 19:22

    Oon tässä kokeillu muutamaan kertaa näitä ja ei toimi.
    Eli ongelmia tulee. Joko linkki näkyy oikein, mutta sivusto antaa 404:sen tai sitten mikään ei toimi ja tulee 500.

    Joten miten saan tästä: index.php?id=view&cat=kategoriannimi
    Tämän: /kategoria/kategoriannimi

    Luonnollisesti niin, että se toimii ilman virhe ilmoituksia?
    Ja mahdollisesti sen miten saada kategoriannimi, joka toimii väleillä näkymään viivoilla ( - ) .

    Ymmärrän rakenteen, mutta en silti saa sitä toimimaan oikein.

  31. Hakukoneoptimointia kommentoi että,

    23.05.2006 @ 19:22

    Seppo:

    RewriteEngine on
    RewriteRule ^sivu/([0-9]+)/$ /sivu\.php\?id=$1 [L]

    Eli tämä on aivan täysin sama minkä aiemmin annoin, tästä on vain puotettu uudelleenohjaus pois. Huomaathan, että id:nä toimivat vain numerot tässä esimerkissä.

    Eli mikäli nyt tuossa dynaamisessa osoitteessa id=13, pitäisi sivun löytyä osoitteesta domain.com/sivu/13/ . Mikäli näin ei ole, ei rewrite engine toimi palvelimellasi, eli yhteydenotto palvelimentarjoajaan on paikallaan.

  32. Hakukoneoptimointia kommentoi että,

    23.05.2006 @ 19:22

    Sama homma Pokelle. Eli testaapa nyt onko mod_rewrite käytössä:

    RewriteEngine on
    RewriteRule ^kategoria/([a-zA-Z0-9]+)/$ /index\.php\?id=view&cat=$1 [L]

    eli jos osoite on index.php?id=view&cat=kategoriannimi, tulisi sivu löytyä nyt kirjoittamalla osoitepalkkiin domain.com/kategoria/kategoriannimi/

    Mikäli ei toimi, niin samat ohjeet, eli yhteys palvelimentarjoajaan asian tiimoilta.

  33. Poke kommentoi että,

    23.05.2006 @ 19:22

    Nyt toimii, kiitoksia.
    Css lähti käsistä kyllä, mutta se oli helppo korjata.
    Nyt sitten pitää muuttaa kaikki linkit tuolle domain.com/kategoria/kategoriannimi tavalle?

  34. Poke kommentoi että,

    24.05.2006 @ 19:22

    Linkki toimii, ja se avaa sivustonkin, mutta ei esitä sivulla oikeita asioita. Kertoo, lähinnä vain, että kategoriassa ei ole tutoriaaleja vaikka tiedän, että siellä on.
    Kun testaan sivun index.php?id=view&cat=kategoriannimi muodossa kaikki toimii oikein.
    Missä siis vika?

  35. Wertti kommentoi että,

    20.06.2006 @ 19:22

    Moi,

    Olisiko täällä vastaus ongelmaani, koska palveluntarjoajani (suhteellisen suuri) ei pysty paikallistamaan ongelmaani.

    Olen tehnyt toimivan sivustorakenteen htaccesilla ja testannut, että htaccess toimii toisella palvelimella.

    Eli ongelma tulee kun laitetaan Options +FollowSymlinks päälle herjaa selain 500 Internal server error, kun sen ottaa pois homma toimii, mutta osoitteet eivät muokkaudu oikein.

    Ja toinen mitä kummastelin, osoitteet ovat muotoa kansio/ ,mutta palvelin ohjaa ne automaattisesti aina muotoon kansio/index.php. Htaccess tiedostoissa ei ole tälläistä ohjausta.

    Olisiko mitään ideoita mtä kenties palvelimella pitäisi tehdä, että homman saisi toimimaan. Itse en ymmärrä palvelinasioista mitään. Laskin sen varaan, että palveluntarjoajani olisi kyennyt ratkaisemaan homman.

  36. Hakukoneoptimointia kommentoi että,

    20.06.2006 @ 19:22

    Eiköhän tuossa httpd.conf mätä. jos niitä kansio/index.php tiedostoja ei ole olemassa niin jotain tämännäköistä sinne httpd.conf:iin.

    Options Indexes FollowSymLinks
    AllowOverride None

    Hämärältä kyllä kuulostaa tuo ongelma…

  37. Aapo kommentoi että,

    27.07.2006 @ 19:22

    Mulla on Rewrite-säännöt, jotka ohjaavat http://sivusto.com/cv => index.php?p=cv. Homma toimii loistavasti, mutta jos nyt haluan tehdä sivuille alihakemiston esim. http://sivusto.com/tmp, niin miten saan tuon ohjauksen pois vain ja ainoastaan tuosta /tmp-hakemistosta. Epätoivoinen yritys oli RewriteCondilla laittaa RewriteEngine Off, mutta tämä ei taida yksinkertaisesti toimia.

  38. Soosi kommentoi että,

    28.07.2006 @ 19:22

    Kokeilin tuota useamman muuttujan tyyliä, jotta saisin sivutussysteemin artikkeleihini mutta kun kokeilen muokata mod_rewritella esim /page([0-9]+)$ -lopun sivut eivät enää toimi normaalilla osoitteella.
    Mod_rewriteni on siis nyt
    RewriteRule ^([a-zA-Z0-9_]+)$ /aoe2/index\.php?a=$1&p=$2 [L]

    Miten tuohon saisi sen että sivut toimisivat normaalilla osoitteella (esim. /scout_rush_tips) mutta saisi myös sivun numeron loppuun (esim. /scout_rush_tips/page2) ?

  39. Soosi kommentoi että,

    28.07.2006 @ 19:22

    Aapo: itse käytän tyyliä http://sivusto.com/tmp/, menee suoraan hakemistoon kun laittaa kauttaviivan loppuun :-)

  40. Aapo kommentoi että,

    28.07.2006 @ 19:22

    Joo, mulla ei toimi tuo kauttaviivan laittaminen perään, sillä rewrite-sääntö on laitettu ohjaamaan myös kauttaviivalliset:

    RewriteRule ^([a-z]+)$ index.php?p=$1 [NC]
    RewriteRule ^([a-z]+)/$ index.php?p=$1 [NC]

    Mutta ratkaisu löytyi. Laittamalla sinne /tmp-hakemistoon oma .htaccess-tiedosto ja määrittämällä siellä RewriteEngine pois käytöstä ratkaisi ongelman!

    Hyödylliset sivut, kiitos näistä!

RSS-syöte tämän julkaisun kommentteihin · TrackBack:in URI-osoite

Kirjoita uusi kommentti

*
Syötä vieressä näkyvän kuvan teksti tekstikenttään.
Anti-Spam kuva


Hakukoneoptimointi
Löytyykö yrityksenne
Googlen hakujen kärjestä? Tutustu!
www.netbooster-agency.fi