Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: .htaccessilla dynaaminen url

Sivun loppuun

combo [25.10.2009 08:31:20]

#

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 ?

Metabolix [25.10.2009 10:44:58]

#

$1 viittaa ensimmäiseen suluissa olevaan pätkään. Tuossa index-a-AEOI.htm ohjataan osoitteeseen index.php?a=AEOI.

combo [25.10.2009 11:13:52]

#

Mistä siihen tulee tuo index-a-:n jälkeen OI.htm? Eihän siinä ole kuin index-a-.htm!

trilog [25.10.2009 11:29:05]

#

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.

combo [25.10.2009 12:08:30]

#

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

trilog [25.10.2009 12:53:42]

#

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.

combo [25.10.2009 14:38:57]

#

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 ?

Metabolix [25.10.2009 14:48:25]

#

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.

combo [25.10.2009 15:09:52]

#

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

trilog [25.10.2009 15:37:59]

#

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

combo [25.10.2009 15:47:30]

#

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?

Metabolix [25.10.2009 15:56:10]

#

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

combo [25.10.2009 15:58:41]

#

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?

Metabolix [25.10.2009 16:36:10]

#

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.

combo [25.10.2009 16:53:01]

#

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

Metabolix [25.10.2009 17:02:12]

#

Lisää if-lauseeseen elseif.

combo [25.10.2009 19:18:01]

#

Ei kyllä nyt oikein onnistunut tuo elseif:n käyttö!
Tässä epäonnistunut koodi;

<?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");
}
  elseif (isset($_GET["kat"]) && $_GET["kat"] == "1") {
    readfile("1.html");

?>

trilog [25.10.2009 19:50:05]

#

Luithan edellä mainitun oppaan kappaleen huolellisesti läpi?

<?php
$sivu = "kuvat.html";
if (isset($_GET["a"]) && $_GET["a"] == "kuvat") {
  if (isset($_GET["kat"])) {
    if ($_GET["kat"] == "uudet_kuvat") {
       $sivu = "uudet_kuvat.html";
    } elseif ($_GET["kat"] == "1") {
       $sivu = "1.html";
    }
  }
} else {
  $sivu = "index.html";
}
readfile($sivu);

combo [25.10.2009 20:38:08]

#

Miten koodiin voi lisätä parametrejä?
Tehdäänkö samalla lailla kuten tuo kat -parametri?

tsuriga [25.10.2009 21:51:01]

#

Kyllä tehdään. Lue se opas, siinä kyllä opetetaan nämä perusjutut. Ei tähän hommaan päivässä opita.

Metabolix [25.10.2009 22:06:09]

#

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

combo [26.10.2009 15:10:39]

#

Ajattelin vaan kun ei oikeastaan muuhun php:tä tarvitsisi niin en olisi sen takia tarvinnut ruveta php:ta opettelemaan!

jo123 [26.10.2009 18:34:14]

#

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

combo [26.10.2009 18:36:54]

#

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!

tsuriga [26.10.2009 19:09:31]

#

Yksinkertaisen dynaamisuuden saa aikaan myös SSI:llä, kts. Putkan SSI-opas.

combo [26.10.2009 20:45:44]

#

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!

reca [26.10.2009 21:59:30]

#

Eihän tätä voi taas kuin nauraa :-D. Jos et tarvitse PHP:ta niin miksi kysyt koodia? :-D

jo123 [26.10.2009 23:26:06]

#

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

tsuriga [27.10.2009 02:10:06]

#

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

combo [27.10.2009 07:12:14]

#

Kaikki helpot dynaamisuuden ajavat koodit kyllä kelpaavat!

Bazeuv [29.10.2009 10:12:36]

#

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.


Sivun alkuun

Vastaus

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

Tietoa sivustosta