Moi.
Tein sivut tuonne MikroBitin palvelimelle, ja nyt säädän htaccess-tiedostolla ja rewritellä.
Koodi (.htaccess-filussa):
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.+) site.php?page=$1 RewriteRule ^admin/$ admin/index.php RewriteRule admin/(.+) admin/site.php?page=$1
sivusto.fi/jotakin/
-> sivusto.fi/site.php?page=jotakin
(toimii)
sivusto.fi/admin/
-> sivusto.fi/admin/index.php
(ei toimi)
sivusto.fi/admin/jotakin/
-> sivusto.fi/admin/site.php?page=jotakin
(ei toimi)
Kun menen nohin ei-toimiviin sivuihin, tulee internal server error (joka on handlattu htaccesssta).
Mikä on väärin?
EDIT: Korjasin typon (admin/admin.php -> admin/index.php)
Osaako joku auttaa?
Ensimmäinen sääntösi toteutuu myöhemmissäkin tapauksissa, joten myöhemmät säännöt menevät hukkaan. Keskimmäisessä säännössä on index.php, vaikka sanoit, että haluat siihen admin.php:n. Viimeisestä säännöstä puuttuu alusta ^-merkki, joten se toimii väärin.
Laita keskimmäinen sääntö ensimmäiseksi ja ensimmäinen viimeiseksi ja lisää vielä jokaisen säännön loppuun [L], jotta myöhemmät säännöt jätetään käsittelemättä.
Terve,
itselläni on vähän saman suuntaista ongelmaa. En ole mitenkään onnistunut saamaan noita urleja siivommiksi esim: kotisivut.fi/indexphp?=etusivu -> kotisivut.fi/etusivu.
Olen testannut montaa eri esimerkkiä, mutta mikään niistä ei tunnu toimivan. Mahtaisiko tuon .htaccessin jotkut muut säännöt häiritä urlien lyhennystä? .htaccessin muut komennot toimivat hyvin. Tällainen .htaccess on tällä hetkellä:
RewriteEngine On RewriteBase / RewriteRule ^([a-zA-Z0-9]+)$ index.php?page=$1 RewriteRule ^([a-zA-Z0-9]+)/$ index.php?page=$1 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?=$1 [L,QSA] RewriteCond %{HTTP_HOST} !^www\.nettisivut\.fi$ [NC] RewriteRule .? http://www.nettisivut.fi%{REQUEST_URI} [R=301,L] ErrorDocument 404 http://www.nettisivut.fi/404error.php ErrorDocument 500 http://www.nettisivut.fi/500error.php AuthUserFile /koti/kauttajat/htaccess/.htpasswd AuthName "kauttajatiedot" AuthType Basic <Files "kauttajatiedot.txt"> require valid-user </Files>
Metabolix kirjoitti:
Keskimmäisessä säännössä on index.php, vaikka sanoit, että haluat siihen admin.php:n.
Oho. Halusin siitä index.php:n, mutta ajatuksissani kirjoitin väärin.
Nyt se ainakin sekos. Se ohjaa site.php:lle jos yrittää mennä etusivulle. O_o
Poistin koko rewriten käytöstä ja katson sitä myöhemmin.
EDIT: Nyt en pääse edes admin-kansion index.php:hen, tulee internal server error...
ErroR++ kirjoitti:
Se ohjaa site.php:lle jos yrittää mennä etusivulle. O_o
Unohdit varmaan siirtää kyseiseen sääntöön kuuluvat ehdot säännön mukana.
Siis?
Kannattaisi varmaan yrittää tajuta edes jotain noista riveistä, jos haluaa käyttää ja jopa muokata niitä. RewriteCond-rivit asettavat ehtoja seuraavaa RewriteRule-riviä varten, joten jos vaihtelet sääntöjen järjestystä, sinun pitää siirtää myös ehdot oikean säännön kohdalle.
Ai nythän se toimii! Kiitos avusta.
Oliko tämä vastaus minulle?
Tässä ollaan aika vasta-alkajia ja osin pakon edestä opettelen muokkaamaan noita nettisivuja. Ikään kuin lennossa opetellaan. Kyselin aiemmin toiseen ongelmaan täältä palstoilta neuvoa ja sain nopeasti hyvät vastaukset.
Osaisiko joku kuitenkin neuvoa mikä tuossa menee metsään ja miten pitäisi toteuttaa tuo url-rivien selkeyttäminen /urlirivi -muotoon index.php?page=urlirivi sijasta?
mcveisti, vastaus ei ollut sinulle. Eihän se edes millään tavalla vastaa kysymykseesi.
Nyt kuitenkin ensimmäisessä viestissä on sattumoisin suoraan oikea ratkaisu ongelmaasi. Ota kaikki ylimääräiset Rewrite-rivit pois ja käytä näitä rivejä:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.+) /index.php?page=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.+) /index.php?page=$1 [L,QSA]
Kiitos vastauksesta. Valitettavasti tämä ei toiminut. Osoiterivi on oikein ja kokeilin poistaa kaiken muun .htaccess tiedostosta. Kokeilin lisätä rewrite engine on -käskyn jne. jne. En vaan saa näyttämään osoiterivejä siltä kun pitäisi???
Olisiko jollain laittaa ihan suoraan omasta varmasti toimivasta .htaccess tiedostosta mallia tänne.
Kummastuttaa kun ei tuon sen ihmeellisempi temppu pitäisi olla, mutta kun en vaan saa toimimaan. Muut komennot tuon .htaccessin kautta toimivat ihan loistavasti.
Osoiterivillähän lukee juuri se, mitä olet sinne kirjoittanut tai mikä oli linkin osoite. Jos kirjoitat osoitteeksi http://www.nettisivut.fi/etusivu, minkä virheilmoituksen saat?
Kirjoittaessani http://www.nettisivut.fi/etusivu sivuille, osoite ohjaa kyllä ihan oikeaan paikkaan.
Ongelma on se, että kun menen nettisivujeni etusivulla olevien sivuston sisäisten linkkien esim. yhteystiedot -linkin kautta sivustoni yhteystieto-sivulle, tulee osoiteriville www.kotisivut.fi/indexphp?=yhteystiedot. Tarkoituksena olisi saada osoiterivillä näkyviin tuolloinkin siistimpi versio: www.kotisivut.fi/yhteystiedot.
No mitenkäs luulit sen nettisivun osaavan muuttaa urlit automaattisesti "luettaviksi"? Eli eihän se sitä osaa tehdä, vaan sinun pitää sinne html:n/php:n sekaan kirjoittaa nuo urlit "selkokielisinä".
Eli muuta itse (esim. ihan käsin kovakoodaamalla tai teet jonkin valmiin rutiinin, joka noita urleja tulostelee sen mukaan, oletko asettanut sef-urlit päälle vai et). nuo kaikki urlit muotoon:
www.kotisivut.fi/index.php?=xxxxxxx -> www.kotisivut.fi/xxxxxxx
Juuri näin luulin, että tuon .htaccessin avulla saisi homman toimimaan noin. Nyt selkosi asia eli hommaa ei saa pelaamaan sillä.
Täytyy yrittää hoitaa homma php:n koodiin.
Kiitos selvennyksistä.
Täh?..
Ei sun tarvi tehdä mitään muuta, kuin muuttaa html:ssä linkit:
<a href="/index.php?page=Galleria">Galleria</a>
Muotoon:
<a href="/Galleria">Galleria</a>
Kuten Lebo80 jo totesikin.
Edit, toki tarvit lisäksi ne ReWriteRulet yms..
Kiitos Dorkvaderi, kun toistelet taas jo selvinnyttä asiaa.
mcveisti kirjoitti:
Juuri näin luulin, että tuon .htaccessin avulla saisi homman toimimaan noin. Nyt selkosi asia eli hommaa ei saa pelaamaan sillä.
Täytyy yrittää hoitaa homma php:n koodiin.
Otappa tosta sitten tarkkaan selvää, että ymmäriskö hän oikein asioita, ei välttämättä, tai sitten ymmärsi, mutta ei jostain syystä halua sitä selvästi kertoa.
Ei vara venettä kaada.
Kyllä siinä selvällä suomenkielellä lukee, että kysyjä luuli aluksi, että .htaccess olisi muuntanut myös linkit automaattisesti sef-urleiksi. Ja hän mainitsee myös, että asia selvisi kommenttini jälkeen ettei se niin toimi.
Nyt hän muuntaa php-koodista urlit selkokielisiksi.
Tässä pitäisi olla mcveistin kaipaama koodi:
# index.php?page=yhteystiedot -> yhteystiedot # Ulkoinen ohjaus, eli näkyy selaimessa asti. RewriteCond %{QUERY_STRING} ^page=(.*)$ RewriteRule ^index\.php$ /%1? [L,R] # yhteystiedot -> index2.php?page=yhteystiedot # Sisäinen ohjaus, eli ei näy selaimessa. RewriteCond %{QUERY_STRING} !^page= RewriteCond %{REQUEST_URI} !^/index\.php$ RewriteRule (.*) index2.php?page=$1 [L,QSA]
Koodia en saanut toimimaan siten, että olisi olemassa index.php-tiedosto; piti muuttaa index2.php:ksi. Tämä ei kuitenkaan haittaa mitään, sillä index.php "toimii" yhä. (Kutsuttaessa suoraan index2.php:tä osoite ei muutu selaimessa, mutta toimii muuten.)
Tällainen koodi ei kuitenkaan anna lupaa jättää korjaamatta sivuston sisäisiä linkkejä. Tämä purkkakoodi on olemassa sivuston ulkopuolisille linkeille (ei olisi kovin kivaa, jos vanhalle etusivulle esim. Googlesta yritettäessä tulisi 404).
Ps. Hakkeroin tätä puoli päivää; siellä saattaa olla joku virhe erikoistapauksien (kuten index.php?page=
) kohdalla. :)
Kiitos tosiaan kaikille hyvistä vastauksista! Hyvä, että asioita väännetään rautalangasta, niin aloittelija tajuaa myös.
Kirjoitin .htaccessiin mm. tällaisen koodin:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.+) /index.php?page=$1 [L,QSA]
ja index.php -tiedostoon tein simppelisti muutoksen Darvanerin ja Lebe80:n ohjeiden mukaan:
<a class="mainlink6" href="index.php?page=yhteys"></a>
jokaisen erillisen linkin kohdalla muotoon:
<a class="mainlink6" href="yhteys"></a>
Nyt toimii homma niin kuin halusin :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.