Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Rewrite-ongelma

Sivun loppuun

ErroR++ [06.06.2012 12:43:56]

#

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)

ErroR++ [06.06.2012 20:57:55]

#

Osaako joku auttaa?

Metabolix [06.06.2012 21:29:48]

#

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ä.

mcveisti [07.06.2012 08:13:30]

#

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>

ErroR++ [07.06.2012 10:40:49]

#

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...

Metabolix [07.06.2012 11:41:38]

#

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.

ErroR++ [07.06.2012 12:49:19]

#

Siis?

Metabolix [07.06.2012 12:51:30]

#

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.

ErroR++ [07.06.2012 13:01:18]

#

Ai nythän se toimii! Kiitos avusta.

mcveisti [08.06.2012 08:58:09]

#

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?

Metabolix [08.06.2012 15:51:50]

#

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]

mcveisti [13.06.2012 07:50:41]

#

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.

-tossu- [13.06.2012 11:20:54]

#

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?

mcveisti [13.06.2012 12:51:21]

#

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.

Lebe80 [13.06.2012 13:34:06]

#

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

mcveisti [13.06.2012 20:00:47]

#

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ä.

dartvaneri [13.06.2012 22:17:18]

#

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..

Lebe80 [13.06.2012 22:43:34]

#

Kiitos Dorkvaderi, kun toistelet taas jo selvinnyttä asiaa.

dartvaneri [13.06.2012 23:18:03]

#

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.

Lebe80 [14.06.2012 09:49:35]

#

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.

jukkah [14.06.2012 20:16:17]

#

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. :)

mcveisti [15.06.2012 10:39:39]

#

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 :)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta