Miten .htaccessilla tehdään dynaaminen url, jossa on yksi ja useampi parametri (&x=jotain) ???
Jotenkin tähän tyyliin;
Options +FollowSymLinks
RewriteEngine on
RewriteRule index-a-(.*)\.htm$ index.php?a=$1
Mutta tarvisin apua kun en tajua että miten tossa määritellään että mikä sivu tulee tuohon index.php?a=$1 = esim. kuvat.html ?
$1 viittaa ensimmäiseen suluissa olevaan pätkään. Tuossa index-a-AEOI.htm ohjataan osoitteeseen index.php?a=AEOI.
Mistä siihen tulee tuo index-a-:n jälkeen OI.htm? Eihän siinä ole kuin index-a-.htm!
Jos menet osoitteeseen index-a-ihanmitätahansa.htm
niin se ohjautuu osoitteeseen index.php?a=ihanmitätahansa
. Tuo käyttää säännöllisiä lausekkeita osoitteiden uudelleenohjaukseen.
Eli onko tuo index-a-jotain.html se sivu joka pitää tehdä että tuo index.php?a=1 toimii?
Tarvis tietää jos haluan tehdä index.php?s=kuvat että mikä alkuperäisen tiedostonnimi pitää olla? eli esim. kuvat_3.html olisi sitten index.php?s=kuvat
Siis esimerkiksi index-a-jotain.htm
on fiktiivinen sivu, sitä ei ole oikeasti olemassa. Kun menet siihen osoitteeseen palvelin ohjaa sinut oikeasti osoitteeseen index.php?a=jotain
(index.php siis on olemassa (a on parametri PHP-skriptille, joka löytyy index.php-skriptin $_GET -taulukosta)).
Voisit hieman selventää mitä haluat tehdä ja mitä sivuja sinulla on. Rewriten avulla ei saada kuin ns. siistittyä osoitetta, dynaamisuus pitää hoitaa esim. PHP:n avulla.
Juu kyllä tiedän että pitää tehdä php:lla dynaamisiksi mutta halusin tietää että tehdäänkö php:lla jo tiedosto, joka on esim. kuvat.html jota käytetään sitten tuossa .htaccessissa index.php?jotain tuon ensimmäisen parametrinhän voi tehdä pelkästään php:lla, mutta miten tehdää .htaccessilla toinen tai enemmän parametrejä, esim. index.php?a=1&s=1&t=uudet_kuvat ?
Soveltamiskyky nolla? Sanoin jo, että $1 viittaa ensimmäiseen suluissa olevaan pätkään, joten loogisesti $2 viittaa toiseen.
RewriteRule index-a-(.*)-b-(.*)\.htm$ index.php?a=$1&b=$2
Kokeilepa Googleen hakusanaa mod_rewrite examples.
Halusin vain varmistaa asian!
Miten tämä; RewriteRule index-a-(.*)-b-(.*)\.htm$ index.php?a=$1&b=$2 siis tehdään php:llä?
En ole saanut tehtyä kuin yhden parametrin php:lla ja siksi ajattelin tehdä .htaccessilla enemmän parametreja!
Tässä Php koodi:
<?php $sivut = array( "etusivu" => "index.html", "info" => "t1.php", "foorumi => "forum.php", // tähän lisää näitä sivuja sitten ); $page = $_GET['sivu']; if(isset($sivut[$page])){ $tiedosto = $sivut[$page]; if(file_exists($tiedosto)){ include($tiedosto); }else{ print"Tiedostoa $tiedosto ei löytynyt!"; } }else{// print"Sivua '$page' ei ole olemassa."; } ?>
Miten se tehdään että a=1&b=2 php:lla esim. & 1:tä' vastaa 1.html ja B=2, 2:ta vastaa 2.html ja jos haluan tehdä samalla parametrillä esim. a=uudet-kuvat niin sitä vastaa uk.html ja vastaavasti b=sivu-1, sivu-1:tä vastaa s1.html. Kokonaisuudessaan; sivut.net/index.php?a=uudet-kuvat&b=sivu-1.
Voiko samaan .htaccess koodiin tehdä
RewriteRule index-a-(.*)-b-(.*)\.htm$ index.php?a=$1&b=$2
ja
RewriteRule index-a-(.*)-b-(.*)\.htm$ index.php?a=$uudet-kuvat&b=$sivu-1 ?
Mod. lisäsi kooditagit
Minulla on koko ajan sellainen tunne, että yrität tehdä rewriten avulla jotakin omituista, mikä ei sillä onnistu.
combo kirjoitti:
En ole saanut tehtyä kuin yhden parametrin php:lla ja siksi ajattelin tehdä .htaccessilla enemmän parametreja!
PHP-koodisi ei edes käsittele noita parametereja mitä tuossa rewrite-rulessa käytät. Suosittelen PHP-oppaan lukemista, näitä asioita käsitellään oppaan 4. osassa.
Sen jälkeen voit tutustua itse rewriteen ja lukea siitä lisää esim. tästä.
No ei sitten mutta saako yhteen .htaccess koodiin tehtyä ainoastaan:
RewriteRule index-a-(.*)-b-(.*)\.htm$ index.php?a=$1&b=$2
Tai miten siis tämä tehdään että tiedän nimetä kuvat sivun esim. kuvat.html:ksi tuossa ?a=1 muutettais a=kuvat ja b=2 muutettais vaikka b=uudet-kuvat ja sen alkuperäinen tiedosto olis uk.html
Yritän tässä hakea sitä että jos minulla on kuvat.html, uudetkuvat.html, uudetvideot.html, artikkelit.html ettei toi esimerkissäni oleva a=kuvat valitse jotain noista randomilla vaikka uudetvideot.html jos pitäisi olla kuvat.html eli kuvat -sivun aloitussivu. Eli mistä valitaan se a=kuvat alkuperäistiedosto?
Viitsisitkö tehdä toimivat koodit?
RewriteRule kuvat\.html$ index.php?a=kuvat RewriteRule videot\.html$ index.php?a=videot RewriteRule uudetkuvat\.html$ index.php?a=uudetkuvat
Kun käyttäjä nyt lataa sivun kuvat.html, käyttäjälle lähetetäänkin sivun index.php?a=kuvat sisältö.
No miten sitten määritellä metabolixin esimerkin mukaan jos halutaan index.php?a=kuvat&kat=uudet_kuvat eli uudetkuvat.html miten tuohon aikaisemmassa viestissä esittämääsi koodiin?
Tajusinko oikein metabolixin aikaisemman viestin koodin ohjeen;
"Kun käyttäjä nyt lataa sivun kuvat.html, käyttäjälle lähetetäänkin sivun index.php?a=kuvat sisältö."
mutta piti olla että käyttäjä lataa sivun index.php?a=kuvat, hänelle lähetetään kuvat.html -sivun sisältö. Pystyykö näin tekemään?
No niin, selvisihän se. Olet selittänyt aivan typeriä vaikka kuinka monen viestin ajan. Jos olisit osannut sanoa heti aluksi, mitä käyttäjä lataa ja mitä silloin pitäisi näyttää, olisit saanut vastauksenkin jo aikoja sitten.
Tuohon ei käytetä htaccessia.
<?php if (isset($_GET["a"]) && $_GET["a"] == "kuvat") { if (isset($_GET["kat"]) && $_GET["kat"] == "uudet_kuvat") { readfile("uudet_kuvat.html"); } else { readfile("kuvat.html"); } } else { readfile("index.html"); }
Jatkahan sitten kohti PHP-opasta, jota jo aiemmin suositeltiin.
saisinko vielä kysyä että miten voisi tehdä esim. kat=muut_kuvat ettei tarvitsisi poistaa koodista uudet_kuvat eli kat=(olisi 2 sivua uudet_kuvat ja muut_kuvat)
Eli tuolla koodilla saisi
index.php?a=kuvat&kat=uudet_kuvat
ja
index.php?a=kuvat&kat=muut_kuvat
Ei kyllä nyt oikein onnistunut tuo elseif:n käyttö!
Tässä epäonnistunut koodi;
Luithan edellä mainitun oppaan kappaleen huolellisesti läpi?
Miten koodiin voi lisätä parametrejä?
Tehdäänkö samalla lailla kuten tuo kat -parametri?
Kyllä tehdään. Lue se opas, siinä kyllä opetetaan nämä perusjutut. Ei tähän hommaan päivässä opita.
Kun vaatimukset eivät ilmeisesti ole kovin kovat, tässä on yksi hassu menetelmä:
<?php $regex = '#.*?((?:[-_a-zA-Z0-9]+(?:/[-_a-zA-Z0-9]+)*)?)$#'; $sivu = preg_replace($regex, '$1', $_SERVER['QUERY_STRING']); if (!strlen($sivu)) { $sivu = 'etusivu'; } $sivu = $sivu.'.html'; if (!file_exists($sivu)) { die('Valittua sivua ('.$sivu.') ei löydy!'); } readfile($sivu);
Voit itse kokeilla, mitä tiedostoja tämä yrittää milläkin parametreilla hakea.
Kuten on jo muutaman kerran sanottu, lue opasta ja opettele itse. Opettelu voi kestää pari kuukautta kohtuulliselle tasolle ja esimerkiksi viisi vuotta taitavaksi. Harjoitusmateriaaliksi suosittelen PHP-haasteen tehtäviä.
Ajattelin vaan kun ei oikeastaan muuhun php:tä tarvitsisi niin en olisi sen takia tarvinnut ruveta php:ta opettelemaan!
combo kirjoitti:
Ajattelin vaan kun ei oikeastaan muuhun php:tä tarvitsisi niin en olisi sen takia tarvinnut ruveta php:ta opettelemaan!
Ajattelet tekeväsi hienoja sivuja ilman php:tä, tai muuta weppiskriptikieltä???
Kylää html:llä pärjää ja netistä löytää valmiita koodeja joita voi käyttää!
Riippu esimerkiksi että minkä tyyppisiä sivuja tekee.
HTML + CSS on ne millä pystyy tekemään sivut!
Yksinkertaisen dynaamisuuden saa aikaan myös SSI:llä, kts. Putkan SSI-opas.
Ei tuosta juurikaan selvinnyt!
Osaisitko tehdä helpon koodin dynaamisuudesta?
Jotain tällaista löytyi;
<!--#include virtual="/cgi-bin/foo.cgi?bar=1&excell=go&etc=you+get+the+picture"-->
Mutta sitten pitäisi saada valmiiksi!
Eihän tätä voi taas kuin nauraa :-D. Jos et tarvitse PHP:ta niin miksi kysyt koodia? :-D
combo kirjoitti:
Ei tuosta juurikaan selvinnyt!
Osaisitko tehdä helpon koodin dynaamisuudesta?
Jotain tällaista löytyi;<!--#include virtual="/cgi-bin/foo.cgi?bar=1&excell=go&etc=you+get+the+picture"-->Mutta sitten pitäisi saada valmiiksi!
Vaikuttaa nyt siltä, ettet oikein tiedä mitä dynaamisuus on...
Combo kyllä ilmaisi tarvitsevansa PHP:tä, mutta vain tähän yksittäistapaukseen. Putka on kuitenkin tarkoitettu ohjelmoinnista keskustelemiseen asiasta kiinnostuneille, valmiista koodista on oltava valmis maksamaan käypä hinta.
Tässä vielä SSI-esimerkki, kun itse oppaasta ei tällaista löytynyt:
<!--#if expr="${QUERY_STRING} = 'kuvat-uudet'" --> <!--#include virtual="uudet_kuvat.html" --> <!--#elif expr="${QUERY_STRING} = 'kuvat'" --> <!--#include virtual="kuvat.html" --> <!--#else --> <!--#include virtual="muu.html" --> <!--#endif -->
Kaikki helpot dynaamisuuden ajavat koodit kyllä kelpaavat!
Metabolix kirjoitti:
...
<?php $regex = '#.*?((?:[-_a-zA-Z0-9]+(?:/[-_a-zA-Z0-9]+)*)?)$#'; $sivu = preg_replace($regex, '$1', $_SERVER['QUERY_STRING']); if (!strlen($sivu)) { $sivu = 'etusivu'; } $sivu = $sivu.'.html'; if (!file_exists($sivu)) { die('Valittua sivua ('.$sivu.') ei löydy!'); } readfile($sivu);...
Huomasitko edes Metabolixin koodia? Se tekee kaiken minkä pyysit.
Aihe on jo aika vanha, joten et voi enää vastata siihen.