mod_rewrite a hezké url

 |  mod_rewrite  |  46 185x
_

Často vyhledávané slovní spojení na internetu - "Jak na hezké url?" Vyhledávače Vám najdou spoustu hesel, ale jak dojít k opravdu funkčnímu řešení? Sám jsem odpovědi na tohle téma mnohokrát vyhledával, ale málokdy jsem našel skutečné řešení. Odpovědi se mi vždy dostalo až na diskusních fórech: diskuse.jakpsatweb.cz, jaknaweb.com, webzdarma.cz/forum Většina článků se totiž věnuje buď základní syntaxi .htaccessu, nebo 100x omílanému tématu vlastních chybovek. V tomto článku nebudu popisovat žádný návod na práci se souborem .htaccess, ale nabídnu Vám již hotová řešení, které jsem sám zkoušel, sám je také používám, takže jejich funkčnost je ověřená. Jediný problém, který může nastat je nedostatečná podpora mod_rewrite hostingu. Již dopředu raději upozorním, že např. na IC.cz s těmito přepisy moc nepochodíte...

Jako první bych uvedl základní přesměrování, na verzi adresy s nebo bez www:
http://www.mujweb.cz » http://mujweb.cz

# www > bez www
RewriteEngine On
Options +FollowSymlinks
RewriteCond %{HTTP_HOST} ^www.mujweb.cz$
RewriteRule (.*) http://mujweb.cz/$1 [R=301,QSA,L]
# verze bez www > s www
RewriteEngine On
Options +FollowSymlinks
RewriteCond %{HTTP_HOST} ^mujweb.cz$
RewriteRule (.*) http://www.mujweb.cz/$1 [R=301,QSA,L]

Je pouze na Vás, pro kterou verzi se rozhodnete - ale je dobré si jednu zvolit. Pro Google PageRank jsou to totiž 2 rozdílné adresy a všechny zpětné odkazy by se Vám dělily.

Jako druhý přepis uvedu přesměrování ze subdomény na doménu. Pokud máte web např. na některém z freehostingů, tak cokoli.mujweb.wz.cz == mujweb.wz.cz. Problém je akorát v tom, pokud to "cokoli" do adresy zadáme, tak to tam také zůstane. Stačí vložit následující řádky do souboru .htaccess, a při zadání adresy jakékoli neexistující subdomény na Vašem webu proběhne přesměrování na Vaši hlavní stránku.

# subdoména > doména (cokoli.mujweb.cz > mujweb.cz)
RewriteEngine On
RewriteBase /
Options +FollowSymlinks
RewriteCond %{HTTP_HOST} ^(.*).mujweb.cz
RewriteRule (.*) http://mujweb.cz/$1 [R=301,QSA]

Tohle přesměrování samozřejmě nepoužívejte v případě, že máte v .htaccessu vytvořenou subdoménu (tzn. doménu 3. řádu na placeném a doménu 4. řádu na freehostingu)

Subdoména se dá vytvořit následujícím zápisem... Dejme tomu, že máme na webu fotogalerii, a chceme pro ni vytvořit vlastní subdoménu. V kořenovém adresáři vytvoříme složku např. foto, kterou pak pomocí mod_rewrite převedeme na doménu 3. respektive 4. řádu. Pokud tak učiníme, musíme ale počítat s možnými problémy - přepisem vlastně složku povýšíme na úroveň kořenového adresáře, takže:

  1. přestanou fungovat relativní HTML odkazy
  2. přestane fungovat relativní includování
  3. .htaccess v rootu přestane mít na naši subdoménu vliv
  4. některé další přepisy tu nebudou fungovat
# subdoména foto.mujweb.cz
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} foto.mujweb.cz
RewriteCond %{REQUEST_URI} !foto/
RewriteRule ^(.*)$ foto/$1

V tuto chvíli nám budou fungovat obě adresy: http://mujweb.cz/foto a http://foto.mujweb.cz. Vy už se musíte postarat o to, aby všechny zpětné odkazy vedly na tu správnou adresu, a vyhledávače indexovali jen to, co chceme my.

Takže subdoménu už jsme vytvořili, ale jde to i zpět? Pokud už Vám ji vyhledávače zaindexovaly, a vy se chcete vrátit zpět k adrese se složkou za lomítkem, stačí použít tento přepis:

 # subdoména > doména/složka
RewriteEngine On
RewriteBase /
Options +FollowSymlinks
RewriteCond %{HTTP_HOST} ^slozka.mujweb.cz
RewriteRule (.*) http://mujweb.cz/slozka/$1 [R=301,QSA,L]

A na závěr už se konečně pustíme do těch "cool uris". V prvé řadě je ale nutné si ujasnit, jak je vlastně budeme používat: pokud se jedná pouze o klasické includování podle podmínky, není problém. Horší je to např. u výpisu z adresáři... Jelikož nám Cool uris udělají z každého souboru pomyslný adresář, musí samozřejmě platit, že ten adresář neexistuje. Pokud máme např. fotogalerii postavenou na výpisu souborů ze složky, mohli bychom si vystačit s něčím takovým: mujweb.cz/?page=prazdniny » mujweb.cz/prazdniny.html. Tento přepis se dá použít i u klasického includování, a navíc návštěvníkům vytvoří krásnou iluzi statického webu. Lze použít i jiné koncovky, které prohlížeče znají: *.php, *.php3, *.htm, *.asp, *.cgi ... a jiné.

# mujweb.cz/?promenna=neco > mujweb.cz/neco.html
RewriteEngine On
RewriteRule ^(.*).html /?promenna=$1

Nebo jiný zápis, s podobným efektem: (změna je v přidání query stringu a v omezení regulárním výrazem)

RewriteRule ^([A-Za-z0-9-]+).(html)?$ /?promenna=$1 [L,QSA]

Další přepis, který je poměrně nutný při zavádění "hezkých url" je následující: potřebujeme se zbavit indexu.php v adrese. Takže potřebujeme přesměrování, které při zadání http://mujweb.cz/index.php návštěvníka přesměruje na http://mujweb.cz/ To samé lze použít i pro index.htm či index.html...

# mujweb.cz/index.php > mujweb.cz/
RewriteEngine On
RewriteRule ^index.php$ http://mujweb.cz/$1 [R=301]

A teď už ty dlouho očekávaní Cool uris =o) Uvádím 3 funkční verze, jednu z nich pro jednu i dvě proměnné. Jestli na konci lomítko bude nebo ne, už určíte Vy tvarem html odkazů. Ty by měly vypadat nějak takto: a href="/neco/"

# mujweb.cz/?page=neco > mujweb.cz/neco/
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ ?page=$1

Pro dvě proměnné stačí k výše uvedenému přepisu přidat následující řádky:

# mujweb.cz/?page=neco&stranka=druha > mujweb.cz/neco/druha
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/([^/]+)?/?$ ?page=$1&stranka=$2

Alternativní možnost pro jednu proměnnou:

# mujweb.cz/?page=neco > mujweb.cz/neco/ (jiná možnost)
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /?page=$1 [L]

A třetí možnost zápisu pro jednu proměnnou:

# mujweb.cz/?page=neco > mujweb.cz/neco/ (zase jiná možnost)
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([A-Za-z0-9-\_]+)/?$ ?page=$1 [L]

Cool uris nám udělají z každého souboru adresář: takže se opět může stát, že některé HTML odkazy přestanou fungovat: v takovém případě stačí každý   a href="/index.php", link href="/style.css", img src="/obrazky/picture.jpg" začít lomítkem. Nezapomeňte také na to, že při přepisu pro více proměnných musíte uvést samostatně přepis pro proměnnou každého řádu.

To by bylo tak asi vše, užívejte si své hezké url. Zasloužíte si je ;-)

Facebook Twitter Google+

Komentáře k článku "mod_rewrite a hezké url"
Zobrazuji pouze posledních 30 komentářů.

Gravatar
Mike 9. 11 2010, 15:41
85/114 Úterý 9. Listopadu 2010, 15:41  |  Opera, Windows Vista

@: Tím pádem to pravidlo nechej jak máš, jen umaž ty další 2 proměnné:

RewriteRule ^(.*)/$ /?rw=1

Ve skriptu teoreticky nemušíš upravovat nic, inkludovat se to bude stejně. Akorát se ti zprovozní ty další 2 proměnné, které jsi chtěl vytvářet v .htaccessu.

Pokud by sis chtěl o možnostech skládání stránek přes include ještě něco přečíst, jeden článek o tom bych tady měl.

http://mike.treba.cz/dynamicke-skladani-stranek-pomoci-include-dil-ii/

Gravatar
miro25 9. 11 2010, 22:34
86/114 Úterý 9. Listopadu 2010, 22:34  |  Chrome, Windows 7

No tak neviem či som to dobre pochopil ale mám to takto teraz v .htaccess:
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)/$ /?rw=1 [L,QSA]

$path = explode('/', preg_replace('/\/$/', '', $_GET['path']));
$rw = $path[0];
$page = $path[1];
$id = $path[2];

A stále Internal Server Error.

Asi ma už zabiješ :)

p.s.:čo sa týka toho generovanie tak to som si stiahol a sa na to pozriem, vyzerá to dobre.

Gravatar
miro25 9. 11 2010, 22:55
87/114 Úterý 9. Listopadu 2010, 22:55  |  Chrome, Windows 7

Ja pako už mi došlo, že toto:
$path = explode('/', preg_replace('/\/$/', '', $_GET['path']));
$rw = $path[0];
$page = $path[1];
$id = $path[2];
nemám dať do .htaccess ale asi do toho script-u php.

Len zatiaľ som neprišiel na to kde.

Gravatar
miro25 10. 11 2010, 02:36
88/114 Středa 10. Listopadu 2010, 02:36  |  Chrome, Windows 7

Tak som sa pozrel na ten tvoj spôsob článok od teba a prejdem na ten tvoj spôsob generovania stránok. Funguje to tam tak ako má a myslím si, že je to aj bezpečnejšie ako ten čo som mal ja.
No hlavne je to elegantnejší spôsob ako generovať stránky :).

Dík za tvoju trpezlivosť a snahu mi pomôcť!!!!

Gravatar
Mike 10. 11 2010, 12:32
89/114 Středa 10. Listopadu 2010, 12:32  |  Opera, Windows Vista

@: Nemáš zač, hlavně, že to funguje :)

Gravatar
daemonic 10. 12 2010, 12:01
90/114 Pátek 10. Prosince 2010, 12:01  |  Firefox, Windows Vista

# mujweb.cz/?promenna=neco > mujweb.cz/neco.html
RewriteEngine On
RewriteRule ^(.*).html /?promenna=$1

Jen takovej malinkej(asi hloupej) dotaz. Nemá na 3. řádku místo .html být \.html (zpětné lomítko před tečkou), aby ta tečka nebyla považována za metaznak, ale za normální znak tečka? A jestli ne, tak proč ne, díky :-).

Gravatar
Mike 10. 12 2010, 12:55
91/114 Pátek 10. Prosince 2010, 12:55  |  Opera, Windows Vista

@: Nemusí, není to v závorce. Ale mod_rewrite se chová všude jinak, takže pokud ti to nepojede, určitě zkus variantu s escapovanou tečkou.

Gravatar
martin 28. 12 2010, 18:05
92/114 Úterý 28. Prosince 2010, 18:05  |  Firefox, Windows 7

Diky za clanok, konecne som uspesne spravil rewrite pre jednu aj dve premenne a funguje aj CSS a obrazky :)
Vdaka!

Gravatar
Ondra 1. 4 2011, 23:44
93/114 Pátek 1. Dubna 2011, 23:44  |  MSIE, Windows 7

Ahoj, tak už několik desítek minut se tu peru s pěknými URL a výsledek nikde.
Mám adresu: http://www.chef06.xf.cz/index.php?page=autor a chci ji změnit na http://www.chef06.xf.cz/autor/

v .htaccess mám napsané toto:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ ?page=$1

Jednotlivé soubory mám includované následovně a umístěné ve složce /pages/
if ($page == "uvod") { include("pages/uvod.php"); }
elseif ($page == "autor") { include("pages/autor.php"); }
elseif ($page == "clanky") { include("clanky/clanky.php"); }
elseif ($page == "clankyp2") { include("clanky/clankyp2.php"); }
....... else..

Hostuju na wz. Kde mám prosím tě chybu? Díky O.

Gravatar
Miloshu 16. 4 2012, 15:17
94/114 Pondělí 16. Dubna 2012, 15:17  |  Chrome, Windows XP

Ahoj, přehledně a hlavně výstižně a srozumitelně napsaný článek, který mi velmi pohoml! Díky!!!

Gravatar
TM 14. 5 2012, 10:39
95/114 Pondělí 14. Května 2012, 10:39  |  Firefox, Windows 2000

Ahoj, zdravim autora skveleho clanku. Potreboval bych take pomoc. Weby s coolurl a mod_rewrite delam bezne a nemam s tim zadny problem. Ale uz dvakrat jsem narazil ze stranky nejsou umisteny primo v rootu webu ale nejake podslozce (napr. www.domena.cz/web). A tady narazim na problem. Kdzy pouziju tag base (www.domena.cz/web) tak mi naskoci web bez stylu a vlozenych obrazku - ale to neni zasadni problem (prepisu si relativni cesty na absolutni).
Problem vznika pokud se snazim prepinat mezi strankami (napr. odkaz /ceniky/toshiba) - vzdycky dostanu 404. ZKousel jsem menit odkazy tak aby ukazovaly na /web/ceniky/toshiba - taky 404.

.htaccess vypada takto:
Options +FollowSymLinks
RewriteEngine on
Rewritebase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ ?cast=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/([^/]+)?/?$ ?cast=$1&stranka2=$2 [L]

i kdyz zmenim rewritebase na /web tak opet dostavam 404. Muzes poradit jak na to? ktera cesta bude nejlepsi aby vse jelo? Pokdu jsi na icq tak to klidne muzem probrat pres nej... dekuju :-)

Gravatar
Mike 3. 6 2012, 00:14
96/114 Neděle 3. Června 2012, 00:14  |  Opera, Windows XP

Ahoj, tohle spíš vypadá na problém odkazů v html, nežli mod_rewrite. Těch pár řádků, které jsi napsal vypadají OK. Pokud použiješ tag <base>, pak je potřeba uvádět všechny odkazy relativně, bez lomítka na začítku. <a href="stranka/podstranka"> - pokud bys chtěl uvádět cesty absolutní, pak se vším všudy i včetně HTTP - tím nikdy nic nezkazíš, a pokud ti styly nepojedou ani v tomto případě, pak už je asi blbě ten mod_rewrite. RewriteBase bych zkusil hodit úplně do háje. Jinak se to píše jako "/slozka/" - dvě lomítka z obou stran.

Gravatar
Anonym 28. 2 2015, 15:48
97/114 Sobota 28. Února 2015, 15:48  |  Firefox, Windows 8.1

Dobrá práce (y)

Gravatar
tom 13. 5 2015, 07:27
98/114 Středa 13. Května 2015, 07:27  |  Chrome, Windows 8.1

Zdravim, zacnu klasickou informaci, ze jsem prolezl vazne vsechny mozny weby a klicovy slova, abych nasel reseni, ale nic mi nefunguje, patrne to bude blbost nejaka. K veci. snazim se o krasny url.

Vzor
RewriteRule ^page/([^/\.]+)/?$ index.php?page=$1 [L]

at uz v nem prepisuji a nazyvam cokoli jakkoli, mi nefunguje

Nejde mi ani zprovoznit to co jste popisoval na zacatku tohoto tematu.

Muj pripad je klasicky:
http://www.example.com/clanek?clanek_id=1
chtel bych
http://www.example.com/1-nadpis-clanku

RewriteRule ^stranka/?$ /index.php?page=stranka [L,QSA]
normalne funguje, vyznam [L] atd chapu.

Dekuji kazde dobre dusi, ktera by me navedla spravnym smerem.
Tom

Gravatar
Mike 13. 5 2015, 22:22
99/114 Středa 13. Května 2015, 22:22  |  Opera, Windows 8.1

ahoj, v tvém případě by mělo stačit něco jako

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?page=$1 [L]

problém ale asi nebude v mod_rewrite ale ve struktuře dat. pokud chceš v url www.neco.cz/napis-clanku/, pak musí být řetězec "nadpis-clanku" uložený v databázi.

při ukládání si samozřejmě musíš ošetřit, aby 2 články nemohly mít stejnou URL. to IDčko tam je naprosto zbytečné - jen dělá z hezkých url o něco méně hezké url.

Gravatar
tom 14. 5 2015, 06:32
100/114 Čtvrtek 14. Května 2015, 06:32  |  Chrome, Windows 8.1

Dekuju za odpoved.
U me mozna bude problem jinde, a omlouvam se to jsem minule nenapsal. Ten system neni napojeny na databazi, ale ridi se promennymi v jednotlivych souborech. Duvod proc to tak je nechapu, nicmene je to pozadavek. Tzn., ze vlastne formou ruznych if, echo, else, require, ob_start() je to cele provazane. Nerikam ze bych to nechtel udelat jinak, ja jsem system prevzal po predchudci (jeho syn), klient si to nenecha vymluvit, vidi vyhodu v tom, jak se systemem pracuje a nechce slyset o tom ze by se musel ucit jiny zpusob, i kdyz jednodussi, s tim nic neudelam.
Jinymi slovy netusim, co bych mohl udelat aby to bralo ze souboru s id v nazvu (1.php) hodnotu promenne $nadpis. Jedine me napada, ze by system zustal vlastne bezdatabazovy, ale ochcal bych to zapisovanim do db pouze id a prislusneho nadpisu a odtud by se pak tahalo do url, jenze si neumim predstavit tu pakarnu aby se to do db zapsalo pokazdy kdyz tam zakaznik nasadi novej soubor. Jenom uvaha. Kazdopadne jestli vas nekoho napada jak hodnotu $nadpis vytahnout ze souboru s prislusnym id, budu vam vdecny. Moc dekuju, Tom

Gravatar
Mike 14. 5 2015, 15:07
101/114 Čtvrtek 14. Května 2015, 15:07  |  Opera, Windows 8.1

ahoj, no jestli to jde všechno přes názvy souborů, tak co ti brání je pojmenovávat jako "titulek-clanku-nejaky.php" ? to by mělo vyřešit url snadno a efektivně.

Gravatar
tom 14. 5 2015, 17:27
102/114 Čtvrtek 14. Května 2015, 17:27  |  Chrome, Windows 8.1

nazvy souboru jsou clanek1 a obsahuje to $clanek_id=1 a $clanek_nadpis=Foo foo foo a $autor_clanku=Jan Novak a cely je to reseny tak ze to vypisuje v ruznych sekcich nejnovejsich 5 clanku a do techto vypisu to taha pres ob_start() hodnoru $ a podle toho to i hleda v informacich o autorovi, protoze autor je autorem clanku 1,3,4,22 takze to vedle clanku vypisuje i seznam odkazu na ostatni autorovi clanky, diky tomu je to docela siroce provazany. Jdybych nevidel kod tak si jako navstevnik myslim ze je to napojeny na db, ale neni :-( Je to na nic, ale jak jsem psal minule, nic s tim neudelam.

Gravatar
tom 14. 5 2015, 17:35
103/114 Čtvrtek 14. Května 2015, 17:35  |  Chrome, Windows 8.1

mohl bych misto $clanek_id=cislo udelat = foo-foo-foo coz by slo napojit i na ty autorovy clanky atd a jako h1 natahovat $clanek_nadpis, perex, datum atd, ale prestalo by fungovat vypisovani seznamu clanku podle kategorii a nejnovejcich, nektery tyhle parametry trideni by asi taky sly ochcat ale nektery proste ne, protoze jsou zavisly na pocitani, mohl bych to sice zase jinudy prevest nazvy na cisla, ty vypocitat a prevest zpatky jako prislusny nadpisy, ale to uz mi prijde jako naprosta pakarna a myslim si ze by mohlo byt jednodussi vymyslet jak to dostat do url.
Header location mi to sice prepise (presmeruje) na nadpis v url, jenze k tomu bych musel pouzit ten zpusob ze vlastne 2 ruzny url vedou na stejny clanek a to se zase nelibo robutkum kvuli duplicitam.

Gravatar
Mike 14. 5 2015, 20:18
104/114 Čtvrtek 14. Května 2015, 20:18  |  Opera, Windows 8.1

takovýmto způsobem tahat autora a datum přes práci se soubory to už je docela síla :-) v podstatě máš 2 (až 3) možnosti :

1. říct klientovi že buď bude databáze nebo nebudou hezké url. ať si to rozhodne.

2. nechat ho ať si články administruje jako doposud, ale přidat nějaké cacheování : ať už do db nebo do souboru. klient by pak s novým článkem akorát zavolal skrytou url, kde by skript tyto všechny informace natáhl a někam poukládal : aby ta operace proběhla vždy jen jednou za čas a nikoli na každý refresh webu.

3. nainstalovat wordpress nebo tak něco :-)

Gravatar
tom 14. 5 2015, 20:56
105/114 Čtvrtek 14. Května 2015, 20:56  |  Chrome, Windows 8.1

hlavne moc dekuju tomu jeho synovi po kterym jsem to prevzal.takze myslis ze i kdyz je to brutalni tak to nepujde? ani treba ochcat to nejak na to jak jsem psal ze by to generovalo duplicitni url a vlastne by to bylo nebezpecny i kvuli tomu ze by se do url dalo napsat cokoli v casti nadpisu, ale to bych pak uz v pohode osetril v htaccessu

Gravatar
Mike 14. 5 2015, 22:09
106/114 Čtvrtek 14. Května 2015, 22:09  |  Opera, Windows 8.1

ale jistěže to půjde. duplicita / ošetření url také nějak půjdou. jenom musíš myslet na to, že takováto úprava ti každou budoucí úpravu webu prodlouží na dvojnásob. dostat takovéto zadání já, tak hodně přestřelím nacenění aby klient pochopil, že tudy cesta nevede. pokud to ale přesto provést musíš a co se týče způsobu tak s klientem nehneš, šel bych cestou 2. mého minulého příspěvku.

Gravatar
tom 15. 5 2015, 05:51
107/114 Pátek 15. Května 2015, 05:51  |  Chrome, Windows 8.1

takze cilem je tak jako tak dostat id a nadpis do databaze odkud si to system nasadi do url, protoze proste nemuzu najit zpusob jak vytahnout nadpis do url z promenny ze souboru

Gravatar
Mike 15. 5 2015, 11:06
108/114 Pátek 15. Května 2015, 11:06  |  Opera, Windows 8.1

naprostým základem hezkých url je vždy mít ten řetězec někde uložený, tedy u článku je vždy nadpis, "Nadpis nějakého článku" + řetěžec do url, "nadpis-nejakeho-clanku". ten se zpravidla generuje při prvním uložení. na to je potřeba myslet, bez toho to nepůjde.

tedy ten url řetězec tam musí být někde uvedený. stačí např. <h1 id="pekny-nadpis-clanku">Pěkný nadpis článku</h1> a pomocí preg_match si to vyparsuješ. ale to parsování je samo o sobě dost hrozné, lepší by bylo to ukládat do nějakého dalšího souboru, kde to bude všechno po kupě (a bude to částečně simulovat DB).

Gravatar
tom 15. 5 2015, 12:32
109/114 Pátek 15. Května 2015, 12:32  |  Chrome, Windows 8.1

jo to by slo, jenze to nezvladnu, nikdy jsem to nedelal, nepotreboval. ty bys mi prosim te umel poradit treba s variantou ze v jednom souboru je $id, $nadpis, $hezky-url-nadpis atd a jak bych to z toho vytahnul? Udelat si $hezky-url-nadpis pri ulozeni to zvladnu, ale netusim jak to dostat do url

Gravatar
Mike 15. 5 2015, 13:28
110/114 Pátek 15. Května 2015, 13:28  |  Opera, Windows 8.1

no asi bych postupoval následovně: třeba na první řádek souboru bych dal html komentář a do něj prostě středníkem oddělené hodnoty :

<!--1;Nadpis článku;hezky-nadpis-clanku-->

funkcí file_get_contents() načteš soubor.
$radky = explode("\r\n", $soubor); rozřežeš obsah podle řádku. vezmeš první řádek $radky[0]

tam klasicky přes str_replace odmažeš začátek a konec toho html komentu, tedy zbyde ti jenom "1;Nadpis článku;hezky-nadpis-clanku".

a opět přes explode rozbiješ do pole, takže budeš mít vlastně array(1, 'Nadpis článku', 'hezky-nadpis-clanku');

Gravatar
tom 16. 5 2015, 06:41
111/114 Sobota 16. Května 2015, 06:41  |  Chrome, Windows 8.1

Jasne, to by mohlo jit, dekuju. mam vytazeny nadpis-nejakeho-clanku. a jak ho dostanu do url?

Gravatar
Mike 16. 5 2015, 13:21
112/114 Sobota 16. Května 2015, 13:21  |  Opera, Windows 8.1

ahoj, no nejdřív musíš zprovoznit odkazy v nějakém takovém tvaru: index.php?clanek=pekny-nadpis - no a pak budeš hledat soubor, ve kterém je řetězec "pekny-nadpis" - když existovat nebude, vrátíš 404ku.

a mod_rewrite pak už bude snadný : RewriteRule ^(.*)$ index.php?clanek=$1 [L] (+ ty první 3 řádky viz jeden z mých prvních příspěvků)

Gravatar
tom 16. 5 2015, 15:59
113/114 Sobota 16. Května 2015, 15:59  |  Chrome, Windows 8.1

takze soubor se furt bude jmenovat 1, link povede na 1 ale v url se objevi /hezky-nadpis ?

Gravatar
Mike 17. 5 2015, 20:49
114/114 Neděle 17. Května 2015, 20:49  |  Opera, Windows 8.1

tak v ideálním případě by se soubor jmenoval přímo "hezky-nadpis.php" a bylo by to nejjednodušší. ale z tvých příspěvků jsem pochopil, že to nejde.

tedy link povede na konečnou url, takže jako <a href="hezky-nadpis/">Článek</a>. a ty pak musíš načíst všechny soubory z adresáře s články a najít ten, který obsahuje právě daný řetězec "hezky-nadpis".

ano, je to naprosto tragické řešení, což je právě důvod, proč jsem na začátku říkal, abys klientovi předložil stanovisko buď bude databáze nebo nic.

Celá diskuse

Přidat komentář







Nevím, kolik to je
Parak simati, Muballit mitte, Nergal allatu mellamu mesaru, La tapallah Annuaki, Kettu Puluthu qillatua