Diskuze: Úprava URL adresy webu

PHP PHP Úprava URL adresy webu American English version English version

Avatar
Paranormal
Redaktor
Avatar
Paranormal:

ZDravím, moc mi nejde do hlavy úprava URL adresy na webu. Něco sem slyšel o .htaccess tak sem se na to podíval, ale moc toho nechápu.

Takže, třeba když mám stránku na kterou odkazuju pomocí odkazu

www.neco.cz/index.php?stranka=novinky

tak jak bych to mohl udělat abych mohl psát třeba jenom

www.neco.cz/index/novinky
nebo jenom "www.neco.cz/novinky"

Díky moc za každý vysvětlení ;)

Odpovědět 11. dubna 15:21
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Paranormal
Jiří Gracík:

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 :D ) query string podle lomítka a máš pole s parametry :)

Nahoru Odpovědět 11. dubna 15:39
Creating websites is awesome till you see the result in another browser ...
Avatar
Jiří Gracík
Redaktor
Avatar
Nahoru Odpovědět 11. dubna 15:40
Creating websites is awesome till you see the result in another browser ...
Avatar
Paranormal
Redaktor
Avatar
Odpovídá na Jiří Gracík
Paranormal:

Bohužel to z toho vůbec nechápu, proto sem napsal sem jestli by mi to nemohl někdo blíže vysvětlit.

Nahoru Odpovědět 11. dubna 15:56
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Paranormal
Jiří Gracík:

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/users/tutočást

podobně v thread.php

echo ( $_GET[ "id" ] );

vypsal z url adresy www.web.com/threads/tutočást

nebo v search.php

echo ( $_GET[ "query" ] );

vypsal z url adresy www.web.com/search/tutočást

Editováno 11. dubna 16:12
Nahoru Odpovědět  +1 11. dubna 16:10
Creating websites is awesome till you see the result in another browser ...
Avatar
Paranormal
Redaktor
Avatar
Paranormal:

Takže stačí tohle

RewriteRule ^produkt/(\d+)*$ ./produkty.php?produkt=$1

A pak napíšu jen .../produkt/mo­nitor

A přesměruje mě to na .../produkty.php?pro­dukt=monitor

? :D Mě to nefunguje teda.

Nahoru Odpovědět 11. dubna 16:29
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Paranormal
Jiří Gracík:

Máš tam všechny ty předchozí příkazy :D?

Nahoru Odpovědět 11. dubna 22:48
Creating websites is awesome till you see the result in another browser ...
Avatar
CZkiniCZ
Člen
Avatar
CZkiniCZ:

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

Nahoru Odpovědět  -1 11. dubna 23:47
Age of the geek.
Avatar
Paranormal
Redaktor
Avatar
Odpovídá na Jiří Gracík
Paranormal:

jj, cely sem to zkopiroval :D A jen upravil

Nahoru Odpovědět 12. dubna 12:08
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
Pavel Parma
Člen
Avatar
Pavel Parma:

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í :)

 
Nahoru Odpovědět  +2 13. dubna 3:43
Avatar
Paranormal
Redaktor
Avatar
Nahoru Odpovědět 13. dubna 8:04
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.