Autor Zpráva
JanS01
Profil
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
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
1: odkazujte href="/stranka/"
2: bude tam vždy adresa sestavená podle href
JanS01
Profil
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
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]
první je pro rozpoznání jazyka
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
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
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
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
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
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
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
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
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
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>
proměná <?= $cesta ?> obsahuje název projektu, je to kvůly cool url na localhostu. Na localhostu tedy v adr. /var/www mám vytvořenou složku např POKUS a složka pokud obsahuje soubor index.php a .htaccess atd, proto u všech odkazů jak u obrázkům, normálních url nebo cest ke knihovnám javascriptu či css mám místo css/style.css -> <?= $cesta ?>css/style.css.

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

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: