En löytänyt ratkaisua seuraavanlaiseen ongelmaan. Ajatellaan että on pääsivu ja sillä kolme alasivua. Normaali index.php joka löytyy osoitteella www.jokusivu.fi.
Sitten on alasivut:
http://www.jokusivu.fi/index.php?page=sivu1
http://www.jokusivu.fi/index.php?page=sivu2
http://www.jokusivu.fi/index.php?page=sivu3.
Pystyykö .htaccess tiedostolla tekemään niin, että selaimen osoiterivillä näkyy
www.jokusivu.fi/sivu1
www.jokusivu.fi/sivu2
www.jokusivu.fi/sivu3
ja kuitenkin sivu näkyy oikein?
Jos ei pysty niin onko jotain muuta keinoa "siistiä" osoitetta. Sivu1, sivu2 ja sivu3 alihakemistoja ei ole. Systeemi pyörii Debianilla ja Apache/2.2.22 (Debian) sekä php5:llä.
Onko tämä yleensä edes mahdollista toteuttaa?
Mod. siirsi aiheen!
En osaa muuttaa domainia, mutta ainakin pystyy muuttamaan seuraavanlaiseksi:
www.jokusivu.fi/sivu1
www.jokusivu.fi/sivu2
www.jokusivu.fi/sivu3
Se saattaa mennä jotenkin näin...
RewriteEngine on RewriteRule ^([a-zA-Z0-9_]+)$ index.php?page=$1
Näin siis veikkaisin, mutta en viitsi kokeilla. Kokeilin, muttei se ainakaan heti ruvennut pelittämään, mutten jaksa säätää...
Lähteenä käytin...
https://www.ohjelmointiputka.net/keskustelu/
Edit - Pahoittelen, että poistin viestin, kun luulin, että se ei toimi (Omalla koneellani ei toiminut ilman säätöä). No tässä tämä sitten on.
Edit2 - Hieno ominaisuus ohjelmointiputkassa on tämä poistetun viestin palautus.
Tärkeää on ensiksi ymmärtää, että htaccess ei ikinä vaikuta selaimessa näkyvään osoitteeseen: jos osoiterivillä lukee X, selain pyytää sivua X. Kaikki muutokset tapahtuvat vasta siinä vaiheessa, kun palvelimelle tulee pyyntö X ja palvelin päättää, miten siihen vastataan.
Kysymys ei siis ole, miten saadaan osoiteriville asia X, vaan kysymys on, miten ohjataan pyyntö X kohteeseen Y. Nuo maagiset säännötkin on helpompi ymmärtää, kun tajuaa, mihin suuntaan tieto liikkuu.
Pelkän polun voi käsitellä, kuten peran yllä näyttää. Esimerkissä pyyntö X ohjataan osoitteeseen index.php?page=X, kun X sisältää vain hakasuluissa annettuja merkkejä. Toinen, ehkäpä tyylikkäämpi vaihtoehto olisi laittaa ohjaus vain suoraan kohteeseen index.php ja tutkia PHP:n puolella, mikä oli alkuperäinen osoite ($_SERVER["REQUEST_URI"]
).
eerol kirjoitti:
www.jokusivu.fi/index.php?page=sivu1
...
www.joku.fi/sivu1
Domainia ei voi muuttaa. Jos selain lähettää pyynnön palvelimelle www.joku.fi, ei ole keinoa, jolla www.jokusivu.fi voisi maagisesti kaapata pyynnön. (Purkkaviritelmiä voi tietenkin tehdä, jos domainit ovat samalla palvelimella. Kuitenkin silloin kysymys olisi aika outo.)
Suokaa anteeksi huolimattomuuteni. Kyseessä on tietenkin sama domain.
Juuri tuota Metabolix:n systeemiä tarkoitin eli että kysytään esimerkiksi sivua www.jokusivu.fi/sivu2 ja palautetaan sivu http://www.jokusivu.fi/index.php?page=sivu2.
Mutta ongelmana on etten saa sitä toimimaan vaikka miten yritän. Kokeilin riveillä:
RewriteEngine on RewriteRule ^([a-zA-Z0-9_-]+)/$1 ^([a-zA-Z0-9_-]+)/index.php?page=$1
Ymmärsin niin, että eka on pyyntö ja sitten vastaus, mutta mikä tuossa on pielessä/puuttuuko jotain?
Kokeilin myös Peran antamalla linkillä yhtä onnettomin lopputuloksin.
Miten sen saa oikeasti toimimaan?
Vastaanpa itse kysymykseen pientä häpeää tuntien, mutta joku muu voi ottaa tästä opikseen.
.htaccess sisältää:
RewriteEngine on RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?page=$1 RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?page=$1
Sitten pitää muistaa tarkastaa että /etc/apache2/sites-available/sivunnimi on muutettu (kaksi kohtaa)
AllowOverride All (oletus none)
Ja vielä /etc/apache2/apache2.conf
<Directory /var/www/> Options FollowSymLinks AllowOverride all Allow from all </Directory>
Tämän jälkeen lähti toimii. Rewrite-systeemiä on helppo testata luomalla juureen kaksi tiedostoa testi1.html ja testi2.html ja laittamalla .htaccess tiedostoon sisällön
RewriteEngine on
RewriteRule ^testi1\.html$ testi2.html (tähän tulee iso L-kirjain hakasulkeissa)
Jos se pelittää niin rewrite toimii.
Koska sulla on pääsy palvelimen varsinaisin konffeihin, niin optimoinnin kannalta olisi parempi laittaa rewritetkin sinne, koska silloin palvelimen ei tarvitse lukea .htaccess-tiedostoja koko ajan. (Eikä etsiä niitä.)
<?php $kansio = 'pages'; $sivut = array('etusivu', 'mallisivu'); $sivu = (in_array($_GET['sivu'], $sivut) ? $_GET['sivu'] : 'etusivu'); $polku = $kansio . '/' . $sivu . '.php'; include((file_exists($polku) ? $polku : 'error.php')); ?>
Tällä minä olen tehnyt, ei ongelmia.
Tosiaan .htaccess:sista saat paremman osoitteen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.