Autor | Zpráva | ||
---|---|---|---|
JanS01 Profil |
#1 · Zasláno: 16. 8. 2013, 11:28:17
Dobrý den,
vím že to tu bylo už nesčetněkrát rozebíráno, ale v mém případě se jedná o dlouhodobý problém s neschopností tvořit cool url, vyzkoušel jsem všechny varianty co jsem mohl nalézt zde i jinde na serverech o webech či programovaní, ale stále mi pěkné adresy nefungují. Mám web na localhostu v adresáři /var/www/projekt, systém mám Ubuntu 12.04(Linux) V současné době mám url ve tvaru http://localhost/projekt/?lang=cs&co=about_us a chtěl bych aby url vypadala následovně http://localhost/BUS/cs/about_us/ v indexu mám odkazy takto <a href="?lang=cs"> pro přepnutí jazykové lokace
a <a href="<?= $url_lang . 'co=about_us' ?>"> pro procházení jednotlivých odkazů, pokud není jazyk pžepnut je defaultní cs a proměná $url_lang obsahuje pouze znak "?"
mod_rewrite mám povolen Našel by se tu někdo vstřícný a poskytl mi tu kod jak jste to řešily pokud jste měly stejný nebo obdobný problém ? + vysvětlení pro blbce :D díky moc a předem děkuji |
||
Str4wberry Profil |
Vizte Řešení některých častějších problémů (FAQ) » Jak zapnout modul mod_rewrite v Apache a následující část „Univerzální obecné pravidlo“.
Jinak adresy do coll tvaru to za vás nepřepíše, to je potřeba udělat vlastnoručně. |
||
JanS01 Profil |
#3 · Zasláno: 16. 8. 2013, 14:17:14
Já mám mod_rewrite zapnutý a tento článek jsem si samozřejmě četl:
1: nevím jak se mám odkazovat jestli ve tvaru jak adresu chce tedy href="stranka/" nebo href="?co=stranka" 2: pokud použiji správný rewrite tvar tak jestli po najetí myší bude adresa stále ve tvaru s ? a & nebo už v požadovaném tvaru a to jak url tak i náhled po najetí na odkaz který se zobrazuje vlevo dole v prohlížeči To jsou věci které jsem se nikde nedočetl |
||
Kajman Profil |
#4 · Zasláno: 16. 8. 2013, 14:47:49
1: odkazujte href="/stranka/"
2: bude tam vždy adresa sestavená podle href |
||
JanS01 Profil |
#5 · Zasláno: 16. 8. 2013, 14:56:24
Musim se tomu tak trošku smát :D ale vždy jsem nevím z jakého záhadného důvodu psal pravidla do rewritu obráceně, takže se pak nemužu divit že to nefungovalo a já byl z toho tak trošku zmatený.
Takže odkaz bude např stranky.cz/en/download/ a v htaccess si jen pohlídám oddělovače tredy / a napíšu celej tvar adresy s ?lang=en&co=download a pak si pomocí php funkce rozparsuju části adresy do pole a nebo mužu používat normálně get[lang] a get[co] ? |
||
JanS01 Profil |
#6 · Zasláno: 16. 8. 2013, 17:30:40
Právě jsem to nějako vyřešil, ale mám jednu jednoduchou otázku jak udělat přes RewriteRule aby mě to detekovalo jen 2 písmena jináč bude platit jiný RR ? Zkoušel jsem to přes regexp ale u výrazu který mi v htaccess funguje mi to hlásí neplatný výraz
RewriteEngine On RewriteRule ^([^/]*)/$ index.php?lang=$1 [L,QSA] RewriteRule ^([^/]*)/([^/]*)/$ index.php?lang=$1&co=$2 [L,QSA] druhé pro rozpoznání jazyka + stránky v daném jazyce a jedná se mi o to že muže nastat i situace kdy nebude adresa.cz/en/truck ale přímo adresa.cz/truck a právě tyto dva případy od sebe potřebuji přes htacces rozlišit |
||
Micruss Profil |
když už to máte ve více jazycích tak je detektujte a pokud např. regulárním výrazem pokud tam je (en|...) tak nahodit jazyk pokud ne tak defaultně čeština a další $_GET se postará o naleznutí truck ne ?
|
||
JanS01 Profil |
#8 · Zasláno: 16. 8. 2013, 18:15:05
Jistě to mě také napadlo ale myslím si že je hezčí když defaulně bude adresa.cz nastavena na češtinu a ne adresa.cz/cs/ případně nevím jak to udělat aby mě to přesměrovalo z adresa.cz na adresa.cz/cs/ jedine přes htaccess
Proto bych raději řešil přes htaccess pžepsání adres po té co je najdu napžíkladu jazykového překladu potřebuji najít v prvním segmentu za asdfawef.cz/ 2 znaky a vím že je to jazykovýá veze a pokud tam bude znaků více vím že se nejedná o jazyk ale stránku |
||
Micruss Profil |
#9 · Zasláno: 16. 8. 2013, 18:42:58
tak jsem se na to celkem mrknul a chce to udělat regexp na jazyky (en|...) atd... pak dát podmínku jestli a když to není jazyk tak nastavit $_GET['co'] = $_GET['lang]; (ale třeba je jiný řešení ;-)) já sem to teĎ zkoušel s in_array() a šlo mi to
"možná je to špatný řešení" <? if(isset($_GET['lang'])) { $jazyky = array('cs', 'en', 'de'); if(in_array($_GET['lang'], $jazyky)) { echo "lang ->".$_GET['lang']; } else { $_GET['co'] = $_GET['lang']; } } if(isset($_GET['co'])) { echo "<br>co ->". $_GET['co']; } ?> |
||
JanS01 Profil |
#10 · Zasláno: 16. 8. 2013, 21:53:59
Jasný chápu jak to myslíš a určitě by to fungovalo kdybych to doladi,l ale jedná se o to že adresa adresa.cz/en/truck bude mít i podstránky :D takže bych o pak musel pracně nahrazovat všechny $_GETry kdyby nastala situace jak jsem již výše popsal: adresa.cz/en/truck/podminky
ale přímo [b]adresa.cz/truck[/podminkyb] proto jsem to chtěl řešit přes htacces kde si pohlídím že první parametr mezi / a / bude jazyk jináš mě to přepne na stránku a nebo když zadám adresa.cz tak aby mě to přesměrovalo na adresa.cz/cs/ a tím by se problém vyřešil, bohužel stále nevím jak na to přes htaccess všechny vyrianty co jsem zkoušel u přesměrování mě nefungovaly |
||
Micruss Profil |
#11 · Zasláno: 16. 8. 2013, 22:47:59
asi bude nejlepší nedělat toto přes .htacces ale přes $_SERVER['REQUEST_URI']; a potom regexem zjistit jestli tam je (cs/en/de.....) a přes .htacces normálně nastavovat $_GET[] a ne jazyk ;-)
|
||
JanS01 Profil |
#12 · Zasláno: 16. 8. 2013, 22:56:33
no $_SERVER['REQUEST_URI'] nemusí vždy vracet hodnotu, co jsem tak zkoušel
proto řeším jak podstrčit /cs/ při zadání adresy a nebo jak napst rewrute rule v htaccess přes htaccess mám poze přepsání adres na cool url, nastavení jazyka jsem chtěl pouze při prvním načtení webu na čestinu což je ale aby se tento parametr objevil i v adrese a já s ním poté přes get mohl pracovat |
||
Micruss Profil |
#13 · Zasláno: 16. 8. 2013, 23:17:44
jestli to tak moc chceš tak proč prostě nezkontroluješ $_GET['lang'] jestli se nerovná s některým jazykům a pokud ne tak ať ho to přesměruje na /cs/? teď myslím na straně php header();
|
||
JanS01 Profil |
#14 · Zasláno: 16. 8. 2013, 23:33:25
njn :D sakra koukám do toho už tak dlouho že mě to prostě nenapadlo :D díky moc, zejtra to vyzkouším a případně tu budu dál prudit svými extravagantními dotazy :D
|
||
Micruss Profil |
#15 · Zasláno: 16. 8. 2013, 23:37:20
Taky se mi stává, že nad tím tak moc přemýšlím až už nevim nic.. a přitom to jde většinou tak jednoduše ... ;-)
|
||
JanS01 Profil |
#16 · Zasláno: 17. 8. 2013, 14:44:18
Ok takže jsem to vyřešil a chtěl bych se o toto řešení podělit:
Mám web, který umožňuje přepnout se do různých jazykových mutací webu (cz | en | de | ru), hned po zadání adresy např: www.domena.cz vás přesměruje index na www.domena.cz/cs/ pomocí if (!isset($_GET['lang'])) { $host = $_SERVER ['SERVER_NAME']; $project = 'domena/cs/'; header("Location: http://$host/$project"); $_GET['lang'] = 'cs'; } poté návštěvník prochází web v češtině pokud chce muže se pžepnout do jiného jazyka přes obrázek <? // nazev_gr - znamená černobílá verze if (!isset($_GET['lang'])) { $_SESSION['lang'] = 'cs'; $cs = $cesta . 'images/czech.png'; $en = $cesta . 'images/england_gr.png'; $de = $cesta . 'images/germany_gr.png'; $ru = $cesta . 'images/russia_gr.png'; } else { if ($_GET['lang'] == 'cs') { $cs = $cesta . 'images/czech.png'; $en = $cesta . 'images/england_gr.png'; $de = $cesta . 'images/germany_gr.png'; $ru = $cesta . 'images/russia_gr.png'; } elseif ($_GET['lang'] == 'en') { $cs = $cesta . 'images/czech_gr.png'; $en = $cesta . 'images/england.png'; $de = $cesta . 'images/germany_gr.png'; $ru = $cesta . 'images/russia_gr.png'; } elseif ($_GET['lang'] == 'de') { $cs = $cesta . 'images/czech_gr.png'; $en = $cesta . 'images/england_gr.png'; $de = $cesta . 'images/germany.png'; $ru = $cesta . 'images/russia_gr.png'; } elseif ($_GET['lang'] == 'ru') { $cs = $cesta . 'images/czech_gr.png'; $en = $cesta . 'images/england_gr.png'; $de = $cesta . 'images/germany_gr.png'; $ru = $cesta . 'images/russia.png'; } } ?> <a href="<?= $cesta ?>cs/"><img src="<?= $cs ?>" width="30" height="30" title="Čeština" alt="" /></a> <a href="<?= $cesta ?>en/"><img src="<?= $en ?>" width="30" height="30" title="English" alt="" /></a> <a href="<?= $cesta ?>de/"><img src="<?= $de ?>" width="30" height="30" title="Deutsch" alt="" /></a> <a href="<?= $cesta ?>ru/"><img src="<?= $ru ?>" width="30" height="30" title="Pусский" alt="" /></a> Cool URL v indexu všude kde používám odkazy na další stránky mám v poly href="<?= $cesta ?>pekny_nazev/" př: <a href="<?= $cesta ?>cs/"> -> odkaz na přepnutí do češtiny. Pokud chcete i pod stránky volám si v adrese i tu puvodní + novou např: <a href="<?= $cesta . $url_lang . 'contact_us/info/' ?>"> Soubor .htaccess ################################ # cool url # ################################ RewriteEngine On RewriteRule ^([^/]*)/$ index.php?lang=$1 [L,QSA] RewriteRule ^([^/]*)/([^/]*)/$ index.php?lang=$1&co=$2 [L,QSA] RewriteRule ^([^/]*)/([^/]*)/([^/]*)/$ index.php?lang=$1&co=$2&spage=$3 [L,QSA] |
||
Micruss Profil |
#17 · Zasláno: 17. 8. 2013, 15:44:15
Čau haleť a nešlo by to jednodušeji? např. takto
než zbytečně na každou podmínku to psát tak a tak... <? $cesta = ''; $lang = array( 'cs'=>'images/czech_gr.png', 'en'=>'images/england_gr.png', 'de'=>'images/germany_gr.png', 'ru'=>'images/russia_gr.png', ); if(array_key_exists($_GET['lang'], $lang)) { $img = $lang[$_GET['lang']]; $img = str_replace('_gr', '', $img); $lang[$_GET['lang']] = $img; } ?> <a href="<?= $cesta ?>cs/"><img src="<?= $lang['cs']; ?>" width="30" height="30" title="Čeština" alt="" /></a> <a href="<?= $cesta ?>en/"><img src="<?= $lang['en']; ?>" width="30" height="30" title="English" alt="" /></a> <a href="<?= $cesta ?>de/"><img src="<?= $lang['de']; ?>" width="30" height="30" title="Deutsch" alt="" /></a> <a href="<?= $cesta ?>ru/"><img src="<?= $lang['ru']; ?>" width="30" height="30" title="Pусский" alt="" /></a> |
||
JanS01 Profil |
#18 · Zasláno: 17. 8. 2013, 15:49:34
Díky za další užitečnou radu, já to předtím neřešil jelikož mi to fungovalo, ale pak to přepíšu
|
||
Časová prodleva: 11 let
|
0