Heippa!
Tuli vastaan pieni muotoinen ongelma. Tein testinä dynaamiset sivut, ja sitten Mod Rewritellä siistin osoitetta:
***index.php <a href="/index/etusivu/">Etusivu</a> | <a href="/index/uutiset/">Uutiset</a><br> <?php if(!isset($_GET["sivu"])) { $sivu = "etusivu"; } else { $sivu = $_GET["sivu"]; } if(!file_exists($sivu . ".php")) { $sivu = "error"; } include($sivu . ".php"); ?>
***etusivu.php
Etusivu
***uutiset.php
Uutiset
***.htaccess # Käynnistää Rewrite enginen. Tämä täytyy kirjoittaa aina ennen Rewrite -sääntöjä. RewriteEngine on Options +FollowSymlinks RewriteBase / RewriteRule ^([a-zA-Z0-9]+)/$ /index\.php?sivu=$1[L]
Ongelma on se, että jos menee http://osoitteeni.fi/index/uutiset/ koodi printtaa etusivu.php:n sisällön.
Uskoisin, että tuossa index.php:n PHP koodissa on se vika. Olenko oikeassa?
Jos laittaa osoitteeksi http://osoitteeni.fi/etusivu/ tai http://osoitteeni.fi/uutiset/, toimii, mutta tietenkään ei tule index.php:n tekstejä.
Etusivulla $_GET["sivu"] näyttää sisältävän merkkijonon "etusivu[L]". htaccesin [L] tulee siis osoitteeseen mukaan, koska sitä ennen ei ole välilyöntiä. Tuossa tilanteessa tosin ei tarvitse koko [L]:ää.
Edit: Siinä ei ollutkaan koko ongelma. Tappelin itsekin tämän kanssa pari päivää sitten. Lisää .htaccesiin rivi "Options -MultiViews", jolloin http://osoitteeni.fi/uutiset/ ei menekään suoraan sivulle http://osoitteeni.fi/uutiset.php vaan menee htaccesin kautta index.php sivulle.
Jos on siis tarkoitus, että osoite on muotoa http://osoitteeni.fi/etusivu/ eikä http://osoitteeni.fi/index/etusivu/ niin linkitkit ovat muotoa "/etusivu/"
Aij:
# Käynnistää Rewrite enginen. Tämä täytyy kirjoittaa aina ennen Rewrite -sääntöjä. RewriteEngine on Options +FollowSymlinks RewriteBase / RewriteRule ^([a-zA-Z0-9]+)/$ /index\.php?sivu=$1 Options -MultiViews
Ei toimi vieläkään, jos laitan osoitteeksi esim. http://osoitteeni.fi/uutiset/
Kokeiles tämmöistä:
RewriteEngine on Options +FollowSymlinks Options -MultiViews RewriteBase / RewriteRule ^([a-zA-Z0-9]+)/$ /index\.php?sivu=$1 RewriteRule ^([a-zA-Z0-9]+)$ /index\.php?sivu=$1 [L]
Edellinen ohjasi vain sivun http://osoitteeni.fi/uutiset/ mutta ei sivua http://osoitteeni.fi/uutiset
Andu kirjoitti:
Kokeiles tämmöistä: ...
Ei toimi vieläkään, :/ Mistäköhän johtuu? :O
Seuraava toimii:
RewriteEngine on Options -MultiViews RewriteBase / RewriteRule ^([a-zA-Z0-9]+)/$ index\.php?1&sivu=$1 RewriteRule ^([a-zA-Z0-9]+)$ index\.php?1&sivu=$1 [L]
Todennus: http://janijohannes.hirmu.net/tavaraa/testit/
Siinä oli ylimääräinen kautta-viiva säännöissä.
janijohannes kirjoitti:
Seuraava toimii:
RewriteEngine on Options -MultiViews RewriteBase / RewriteRule ^([a-zA-Z0-9]+)/$ index\.php?1&sivu=$1 RewriteRule ^([a-zA-Z0-9]+)$ index\.php?1&sivu=$1 [L]Todennus: http://janijohannes.hirmu.net/tavaraa/testit/
Rocceri/hehee Siinä oli ylimääräinen kautta-viiva säännöissä.
Nämä kaikki muutkin ovat toimineet jos sivu on jotain.jotain, mutta jos onkin jotain.php?sivu=jotain, niin tämä ei toimikkaan.
No siinä tapauksessa lisää heti RewriteBase:n seuraavalle riville:
RewriteRule \? \# #Tai minkä haluatkaan RewriteRule \& \@ #Tai minkä haluatkaan RewriteRule ^([a-zA-Z0-9\#\@]+)/$ index\.php?1&sivu=$1 RewriteRule ^([a-zA-Z0-9\#\@]+)$ index\.php?1&sivu=$1 [L]
Ja sitten PHP:ssä korvaat takaisin.
Oho.. Nyt oon kyllä ollut sekaisin. Mulla on ollut väärä koodi väärässä paikkaa. Kyllä noista kaikki toimii, mutta oon kirjoittanut väärin. :D
Vielä sen verran, että jos onkin kansio kyseessä. Mitä silloin pitäisi tehdä? :D
Jos on kansio test ja menee http://osoitteeni.fi/test niin se etsii test.php tiedostoa. Sama jos on http://osoitteeni.fi/test/ Pitäisikö tuo
RewriteRule ^([a-zA-Z0-9\#\@]+)$ index\.php?1&sivu=$1 [L]
poistaa koodista?
EDIT: Jotta kansioon pääse, pitää olla esim. http://osoitteeni.fi/test/tiedoston_nimi. Pelkkä kansion nimi ei riitä
Hmm... Helpointa taitaa olla poistaa seuraava:
RewriteRule ^([a-zA-Z0-9\#\@]+)/$ index\.php?1&sivu=$1
Aihe on jo aika vanha, joten et voi enää vastata siihen.