PHP Centeri avaleht Skriptikogu Küsimuste-vastuste leht Teadete vaatamine ja saatmine Foorum - koht küsimiseks Otsingumootor Siit saad infot meie kohta

Kasutajanimi:  
  Parool: 
  Registreeri!   Unustasid salasõna?

 Skriptid (427) 

 Bannerisüsteemid
 E-kaardid
 E-maili saatmine
 E-poed
 Failihaldus
 Flash ja PHP
 Foorumid
 Jututoad
 Kalendrid
 Kalkulaatorid
 Kellad
 Klikilugejad
 Kommentaarid
 Külalisteraamatud
 Küsitlused
 Lehe turvamine
 Lingikogud
 Mängud
 Otsingusüsteemid
 Pildid ja PHP
 Shoutboxid
 Sisuhaldussüsteemid
 Statistika
 Suunamine
 Templeidisüsteemid
 Testid
 Uudised
 Uudistelistid
 Varia


 Otsing 

 

 Utiliidid 

 Kes on kus
 Kasutajate info
 Küsitlused
 PHP manuaal
 Õpetused
 Jututuba
 Lingikogu
 Lemmikskriptid


 Klantsitud URL-id
Autor: laurik
Pühapäev, 02. november 2003 23:25
Klantsitud URL-id

Selles juhises näidatakse võimalusi, kuidas www.server.ee/index.php?cid=12&lang=en asemel kasutada kenamaid URL-e, nt www.server.ee/cid/12/lang/en

Teemas käsitletud näited saab downloadida siit!

Esimene moodus: www.server.ee/index.php/cid/12/lang/en
Sellise mooduse eeliseks on asjaolu, et kasutamine ei eelda Apache konfiguratsioonifailide (httpd.conf/.htaccess) muutmist.

Esiteks tuleks kindlaks teha skripti url, kuna dünaamiline $_SERVER['PHP_SELF'] tagastab URL-ina mitte ainult /index.php vaid lisab sellele argumendid /index.php/cid/12/lang/en ja seetõttu ei saa seda linkides jm juures kasutada (mitmekordsel kasutamisel URL järjest pikeneb...).

Skripti URLi annab järgmine koodirida:

PHP kood:


print 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'];
# http://localhost/my/_txt/clean-urls/utils/get-script-url.php



Saadud väärtus tuleks omistada mingile muutujale, mida edaspidi $PHP_SELF jms asemel pruukida:
PHP kood:


define('PHPSELF''http://localhost/my/_txt/clean-urls/simple-way/test1.php');



Järgmiseks võib teha mõned lingid:
PHP kood:


print '<a href="'.PHPSELF.'/cid/1">Kõrgem kategooria</a><br>';
print 
'<a href="'.PHPSELF.'/cid/2">Esimene klass</a><br>';
print 
'<a href="'.PHPSELF.'/cid/3">Veel midagi</a><br>';



URL-muutujate püüdmiseks on mitmeid võimalusi.

Esiteks.
PHP kood:


// koodijupp moodustab massiivi, milles indeksiks on argumendi positsioon urlil
// ja väärtuseks argumendi nimi: array([0] => [1] => cid [2] => 2 )
if(isset($PATH_INFO)) {
$viewcode explode('/'$PATH_INFO);
$num count($viewcode);
if(
$num == 0) {
$viewcode[] = '';
$num++;
}
for(
$i 1$i $num$i += 2) {
$
$viewcode[$i] = $viewcode[$i+1];
}
}

print_r($viewcode);

switch ($viewcode[2])
{
case 
1: print 'valisid esimese'; break;
case 
2: print 'valisid teise'; break;
case 
3: print 'valisid kolmanda'; break;
default: print 
'vali midagi!';
}



Teiseks:
PHP kood:


// tagastab argumendid ühe stringina, nt cid/2/lang/en
function args() {
static 
$args;
if (empty(
$args)) {
$args substr(FULLPATH,strlen(PHPSELF)+1,strlen(FULLPATH));
}
return 
$args;
}

// tagastab nimetatud argumendi, nt arg(0) - cid
function arg($index)
{
static 
$arguments;
if (empty(
$arguments))
{
$arguments explode('/'args());
}
return (isset(
$arguments[$index])) ? $arguments[$index] : NULL;
}

define('FULLPATH''http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']);

switch (
arg(1))
{
case 
1: print 'valisid esimese'; break;
case 
2: print 'valisid teise'; break;
case 
3: print 'valisid kolmanda'; break;
default: print 
'vali midagi!';
}



Kolmandaks on toodud näide, kus argumendid ei pea olema kindlal positsioonil vaid need võivad asuda suvalises paigas. URL näeb välja selline: www.server.ee/index.php/cid,2/lang,en -- need teisendatakse PHP muutujateks nt praegusel juhul $cid == 2 ja $lang == en

PHP kood:


$currentpath str_replace('=',',',FULLPATH);
$aURL explode(PHPSELF$currentpath);
$querystring $aURL[1];

$actions explode('/'$querystring);
if (
is_array($actions))
{
// moodustatakse massiiv, mille indeksiks on esimene argument ja väärtuseks
// teiselpool koma olev muutuja
foreach($actions as $action)
{
if (
strstr($action','))
{
list(
$var,$val) = explode(','$action);
$result_arr[$var] = $val;
}
else
{
${
$action} = 1;
}
}
// siin moodustatakse massiivist PHP muutujad
if (isset($result_arr))
if(
is_array($result_arr))
extract($result_arr);
}

print 
'CID: '.$cid.'<br>LANG: '.$lang;



[suurus]Teine moodus: www.server.ee/go/page/1/lang/en

Selle meetodi kasutamine eeldab juba Apache konfi-failide modifitseerimist: tuleb teha .htaccess fail, milles rida:

PHP kood:


ForceType application/x-httpd-php



või parem veel kui selles on näidatud kataloog (kataloogi saab teada koodireaga: print dirname($_SERVER['PATH_TRANSLATED'])
PHP kood:


<Location "w:/www/local">
ForceType application/x-httpd-php
</Location>



Selline .htaccess fail käseb Apachel kõiki antud kataloogis olevaid faile käsitleda PHP-failidena. Nt fail "go" (ilma laiendita) sellises kataloogis käivitatakse PHP-skriptina.

Selle teadmisega võib ülaltoodud koodilõike kasutada pea muutmata kujul (php-failist tuleks eemaldada faililaiend ning asendada tuleks ka PHPSELF konstant)!

Kolmas moodus: www.server.ee/page/2/lang/en
Antud juhul kasutatakse Apache mod_rewrite moodulit. See on vaadeldud juhtumitest kõige võimalusterikkam ja mugavam kuid paraku ka keeruliseim.

Esmalt tuleks veenduda, et Apache laeb nimetatud mooduli. httpd.conf -is peab olema järgmine rida:

PHP kood:


# LoadModule alguses ei tohi esineda trelle (#)
LoadModule rewrite_module modules/mod_rewrite.so



Järgmiseks tuleb teha .htaccess fail (kataloogi, kus kenasid url-e näha soovitakse), milles read:
PHP kood:


DirectoryIndex index.php

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond 
%{REQUEST_FILENAME} !-f
RewriteCond 
%{REQUEST_FILENAME} !-d
RewriteRule 
^(.*)$ /my/_txt/clean-urls/mod_rewrite/test1/index.php?arg=$1
</IfModule>



Selline fail käseb Apachel esiteks kataloogi index-failina kasutada index.php-d ning järgmised tingimused ja reeglid on mõeldud mod_rewrite juhtimiseks. Lõpptulemuseks on see, et URL-ile järgnevad muutujad saadetakse /my/_txt/.../index.php argumendiks $arg. Selle väärtuse saab kätte muutujast $_GET['arg'], kus seda võib juba eespool toodud meetodidel tükkideks lammutada ning kasutada.

Järgnev reegel loob olukorra, kus URL on kujul www.server.ee/newsN.html ja see suunatakse index.php?page=news&id=N -le:
PHP kood:


RewriteRule ^news(.*).html$ /my/_txt/clean-urls/mod_rewrite/test2/index.php?page=news&id=$1



Lisainfot mod_rewrite kohta leiab Apache dokumentatsioonist ( mirror )

Teemas käsitletud näited saab downloadida siit!

--
(c) 2003 Lauri Kasvandik


Avaleht   -    Skriptikogu   -    Teated   -    Foorum   -    Reklaam   -    Tagasiside   -    Kasutamise reeglid

© Copyright 2002-2019 PHP Center. Kõik õigused reserveeritud.