Diskuze: Úprava URL adresy webu
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Je to vysvětlené tady v PHP MVC tutorialu. V podstatě znásilníš apache k tomu, aby vzali adresu a dali ji indexu jako get parametr, takže z tohle:
www.neco.cz/novinky/2016/brezen
se pošle nějakýmu tvýmu souboru jako get parametr, třeba takhle
www.neco.cz/index.php?q=novinky/2016/brezen
Pak si v aplikaci rozsplituješ (v php explode ) query string podle lomítka a máš pole s parametry
Odkaz na tutorial:
http://www.itnetwork.cz/…er-kontroler
Bohužel to z toho vůbec nechápu, proto sem napsal sem jestli by mi to nemohl někdo blíže vysvětlit.
Co konkrétně? Jestli myslíš .htaccess, tak to nechápe skoro nikdo, je to spojení pěkný čuňárny, magie a hodně štěstí. Kdybys to i tak chtěl pochopit, tak třeba tady http://code.tutsplus.com/…ls--net-6049
Půjčíme si z toho ten htaccess
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^users/(\d+)*$ ./profile.php?id=$1
RewriteRule ^threads/(\d+)*$ ./thread.php?id=$1
RewriteRule ^search/(.*)$ ./search.php?query=$1
Poslední tři řádky říkají, že když je adresa users/.... tak se to pošle souboru profile.php a zbytek adresy jako get parametr id, stejně tak pro threads/... se volá thread.php a get parametr bude id a pro search search.php s get parametrem query. Takže v souboru profile.php bys takto
echo ( $_GET[ "id" ] );
vypsal z url adresy www.web.com/…**tutočást**
podobně v thread.php
echo ( $_GET[ "id" ] );
vypsal z url adresy www.web.com/…**tutočást**
nebo v search.php
echo ( $_GET[ "query" ] );
vypsal z url adresy www.web.com/…**tutočást**
Čáry máry
//Zapneš RewtiteEngine.
RewriteEngine on
//Nejsem si jistej jestly tam můsí být i tohle. . .
RewriteBase /
//Tohle by mělo být ono.
RewriteRule ^clanek-(.*) index.php?stranka=$stranka
$stranka je thoje $get
Zkus jestly to pujde ale moc od toho nečekej.
Apache jako webový server je velice prostý. Jeho účel je v první řadě restrikce nad requestem. Tyto restrikce defaultně nastavuješ v configu, ale pokud zapnes AllowOverride tak .htaccess soubory mohou po cestě menit nastavení, dokonce i php.
Jelikož nechceš, aby si kdokoli mohl zobrazovat jakýkoli script z tvého systému, což by mohl, protože apache jen podle url prohledává adresáře od složky, která je označena jako DocumentRoot, tak se stačí přesměrovat za všech okolnotí na jeden script, který se už postará o to, aby se akce z url delegovala ke správnému scriptu, který bude odpovídat akci (u presentation patternu mluvíme o Controlleru, Presenteru, ModelView, čemkoli...).
Toto přesměrování se provádí skrze directivu RewriteRule
zápis je : RewriteRule [pattern] [náhrada] [flagy]
Před RewriteRule může být libovolný počet RewriteCond, což jsou prostě
ify. Aby se rewrite provedl, musí být každý RewriteCond před RewriteRule
vyhodnocen jako pravda.
Tyto RewriteCond se často používají pro media jako css, js, images etc... Nejčastěji v prakci máš jednu složku, která je veřejná, takže buď dns odkazuje přímo do této složky, nebo máš ještě před tím nějaký jiný htaccess, který to sem vždy přesměruje. Zde můžeš mít zápis jako
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
Toto nejčastější s čím se setkáš, říká to, že pokud požadovaný soubor neexistuje od aktuální adresáře dále, nebo to není existující adresář, tak se vše přesměruje na index.php, což bude výchozí script.
Velice v kostce, hodně jsem vynechal, ale pro vysvětlení mi to přijde dostačující
Zobrazeno 11 zpráv z 11.