NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Úprava URL adresy webu

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Verquido
Tvůrce
Avatar
Verquido:11.4.2016 15:21

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.4.2016 15:21
Avatar
Odpovídá na Verquido
Neaktivní uživatel:11.4.2016 15:39

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.4.2016 15:39
Neaktivní uživatelský účet
Avatar
Nahoru Odpovědět
11.4.2016 15:40
Neaktivní uživatelský účet
Avatar
Verquido
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Verquido:11.4.2016 15:56

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.4.2016 15:56
Avatar
Odpovídá na Verquido
Neaktivní uživatel:11.4.2016 16:10

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

Editováno 11.4.2016 16:12
Nahoru Odpovědět
11.4.2016 16:10
Neaktivní uživatelský účet
Avatar
Verquido
Tvůrce
Avatar
Verquido:11.4.2016 16:29

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.4.2016 16:29
Avatar
Odpovídá na Verquido
Neaktivní uživatel:11.4.2016 22:48

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

Nahoru Odpovědět
11.4.2016 22:48
Neaktivní uživatelský účet
Avatar
CZkiniCZ
Člen
Avatar
CZkiniCZ:11.4.2016 23:47

Čá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
11.4.2016 23:47
Age of the geek.
Avatar
Verquido
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Verquido:12.4.2016 12:08

jj, cely sem to zkopiroval :D A jen upravil

 
Nahoru Odpovědět
12.4.2016 12:08
Avatar
Pavel Parma
Člen
Avatar
Pavel Parma:13.4.2016 3:43

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
13.4.2016 3:43
Avatar
Verquido
Tvůrce
Avatar
Odpovídá na Pavel Parma
Verquido:13.4.2016 8:04

Dá se :) Díky

 
Nahoru Odpovědět
13.4.2016 8:04
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.