Elikkäs, mulla on sivu jossa on sitten oppaita,yms, siinä on linkki lista, jossa on sitten linkki 'Oppaat'. No siitä kun klikkaa niin aukee sen 'Oppaat' linkin alle alalinkkejä. No nyt kun klikkaa auki jonkin alalinkin, se menee osoitteeseen /Oppaat/Muut niin kuin pitääkin, okei se hakee ko tiedoston sisällön siihen content divin sisään, MUTTA nyt käy niin, että lähes kaikki ulkoasusta lähtee mäkeen. Noh kun nyt painan linkki listasta jotain linkkiä, vaikka 'Projektit', niin eipä menekkään osoitteeseen '/Projektit' vaan meneekin virheelliseen osoitteeseen '/Oppaat/Projektit', kyllä se näinkin löytää sen oikeen sisällön sinne, mutta osoite on väärin, eikä ulkoasua liiemmin ole enää. Tai siis ulkoasusta katoaa vain 'Kuvat'-kansiossa olevat kuvat.
Eli missä on syy? Ja mitenkäs mää sen voin korjata?
Vähän koodia:
Normaali linkki: <li class="li"><a href="Galleria">Galleria</a></li> Oppaat linkin alavalikossa oleva Muut linkki: <li class="sisalista2"><a href="Oppaat/Muut">Muut</a></li>
.htaccess tiedoston sisältöä:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?sivu=$1 [QSA,L] RewriteRule ^Oppaat/(.*)$ index.php?sivu=Oppaat&kategoria=$1 [QSA,L]
Ps. on varmaan vähän epäselvää tekstiä, mutta yrittäkää saada tolkkua.
Aloita linkin osoite kauttaviivalla, jolloin se on suhteessa osoitteen juureen.
<li class="li"><a href="/Galleria">Galleria</a></li>
Samalla tavalla saat myös kuvat toimimaan.
En ole mod_rewrite-guru, mutta mielestäni jälkimmäinen RewriteRule ei toimi, sillä ensimmäinen sääntö kattaa kaikki osoitteet ja lopettaa sääntöjen käsittelyn. Ilmeisesti koodi kuitenkin toimii halutulla tavalla.
Kiitos vastauksesta. Tuo korjasi nytten ton linkki ongelman, muttajostain syystä vielä kuvat ovat hukassa.
Edit. Sainkin korjattua kuva ongelman, kun lisäsin css-tiedostossa /-viivan 'kuvat' sanan eteen.
background-image: url('/kuvat/body2.png');
Edit2. Seuraava ongelma on, että kun aukaise tuon 'muut' sivun 'oppaat' alivalikosta, niin nyt haluan tietää tämä sivun(sivu=Oppaat) sisällön, kun nyt tulostan sen, se antaa mulle tuloksen: Oppaat/Muut , kun haluaisin sen näyttävän vain ton 'Oppaat'. Pitääkö mun tehdä purkka viritys, ja pregeillä katkaista tosta /-merkin kohdalta, vai onko jokin, joka on väärin tuossa RewriteRulessa, tai jokin, jota muuttaa?
<a href="Oppaat/Muut">Muut</a>
Vaihda RewriteRulejen paikkaa, niin ne toimivat kuten haluat. Tietysti voit myös katkaista osoitteen PHP:llä, ja silloin vältyt RegExp-viritykseltä käyttämällä explode-funktiota.
Itse hoitaisin homman PHP:llä niin, ettei osoitteita tarvitsisi missään vaiheessa edes katkaista, jolloin ei myöskään tarvitsisi päivittää RewriteRuleja, mikäli sivuja tulee lisää.
Noh nyt toimii linkit niinku pittääki, mutta kun nyt ei sitten nuo kuvat näy ollenkaan.
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^Oppaat/(.*)$ index.php?sivu=Oppaat&kategoria=$1 [QSA,L] RewriteRule ^Vinkkeja/(.*)$ index.php?sivu=Vinkkeja&kategoria=$1 [QSA,L] RewriteRule ^Projektit/(.*)$ index.php?sivu=Projektit&kategoria=$1 [QSA,L] RewriteRule ^Muuta/(.*)$ index.php?sivu=Muuta&kategoria=$1 [QSA,L] RewriteRule ^(.*)$ index.php?sivu=$1 [QSA,L]
css:
background-image: url('/kuvat/body2.png');
Mod. vaihtoi oikeat kooditagit!
dartvaneri kirjoitti:
Noh nyt toimii linkit niinku pittääki, mutta kun nyt ei sitten nuo kuvat näy ollenkaan.
RewriteRule ^(.*)$ index.php?sivu=$1 [QSA,L]
Tossa kirjoitat kaikki index.php:hen. RewriteCond vaikuttaa vain seuraavaan sääntöön.
Eli? Mikä siis on vika?
Edit. Osaaki joku vastata kysymyksiini, ja myös siihen miten saan kuvat takaisin?
Juurihan Niko vastasi: RewriteCond vaikuttaa aina vain seuraavaan sääntöön, joten tässä ehdot eivät vaikuta ollenkaan tuohon viimeiseen sääntöön, jolloin aivan kaikki (oikeat ja väärät) tiedostonimet ohjataan index.php:lle. Laita oikeat RewriteCond-rivit oikeaan paikkaan (tarvittaessa moneen kertaan), niin koodisi pitäisi toimia.
Toinen vaihtoehto olisi varmaan vaihtaa säännöllistä lauseketta niin, että se ohittaa /-merkilliset nimet.
RewriteRule ^([^/]+)$ index.php?sivu=$1 [QSA,L]
Ahaa, okei, kokeilin laiittaa voita RewriteCondeja jo aiemin useaan kertaan, mutta jostain syystä ne eivät silloin toimineet, mutta nyt toimii, kiitos.
Aihe on jo aika vanha, joten et voi enää vastata siihen.