Autor Zpráva
GregHowe
Profil *
Ahoj snažím se rozchodit mod_rewrite se kterým zatím nemám zkušenosti. Chci udělat multijazykový web a dočetl jsem se, že je pravidlo že každá stránka jazyková sada musí mít svoje jednoznačné url, čili píšu univerzální php pro všechny jazyky a jednotlivé texty odděluji ve SMARTY ... snažim se prostě neprasit. Nicméně mod_rewrite nefunguje.

mod_rewrite ... jsem odpoznámkoval v httpd.conf restartoval apache... žádnej error takže se načet v pohodě. googlil jsem a celý httpd.conf mám nakonfigurovaný správně ... .htaccess mi funguje jinak by nešla ani kapča.. to jsem taky testoval ... takže jsem do něj narval :
RewriteEngine on 
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/(.*) /index.php?slug[0]=$1&slug[1]=$2&slug[2]=$3 [QSA] RewriteRule ^([^/\.]+)/([^/\.]+)/(.*) /index.php?slug[0]=$1&slug[1]=$2 [QSA] 
RewriteRule ^([^/\.]+)/(.*) /index.php?slug[0]=$1 [QSA]
což prostě má fungovat, ale když se pokusim odchytit slug[0] v indexu jakože :
if(isset($_GET['slug'][0])){ 
      echo $_GET['slug'][0]; exit; 
}else{ 
     echo "neni"; $_GET['slug'][0] = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); 
}
dostanu vždycky to "neni"

takže prostě ten get nechytí a nevim proč. Dělám to na localhostu. Nenapadá někoho něco? Děkuji.
Davex
Profil
Zkus zkontrolovat všechna potřebná nastavení.
GregHowe
Profil *
Ano. Jak již jsem psal httpd.conf mám nakonfigurovaný správně když kouknu do logu na tu akci tam neni žádná chyba ani ... je tam kód 200
Kajman
Profil
GregHowe:
Zkuste si dát na chvíli do flagů (k QSA) i flagy L,R,NE.

Případně si zapněte RewriteLog a mrkněte, co se tam děje, nebo sem pošlete logování jednoho požadavku.
GregHowe
Profil *
když jsem přidal flagy L,R,NE. nezměnilo se nic.. tak jsem zapnul to logování a dostal jsem tento výpis.

::1 - - [13/Aug/2013:17:32:25 +0200] [localhost/sid#9ba980][rid#14d6150/initial] (3) [perdir C:/dev/www/] strip per-dir prefix: C:/dev/www/ ->
::1 - - [13/Aug/2013:17:32:25 +0200] [localhost/sid#9ba980][rid#14d6150/initial] (3) [perdir C:/dev/www/] applying pattern '^secure/captcha.jpg' to uri ''
::1 - - [13/Aug/2013:17:32:25 +0200] [localhost/sid#9ba980][rid#14d6150/initial] (3) [perdir C:/dev/www/] strip per-dir prefix: C:/dev/www/ ->
::1 - - [13/Aug/2013:17:32:25 +0200] [localhost/sid#9ba980][rid#14d6150/initial] (3) [perdir C:/dev/www/] applying pattern '^([^/\.]+)/([^/\.]+)/([^/\.]+)/(.*)' to uri ''
::1 - - [13/Aug/2013:17:32:25 +0200] [localhost/sid#9ba980][rid#14d6150/initial] (3) [perdir C:/dev/www/] strip per-dir prefix: C:/dev/www/ ->
::1 - - [13/Aug/2013:17:32:25 +0200] [localhost/sid#9ba980][rid#14d6150/initial] (3) [perdir C:/dev/www/] applying pattern '^([^/\.]+)/([^/\.]+)/(.*)' to uri ''
::1 - - [13/Aug/2013:17:32:25 +0200] [localhost/sid#9ba980][rid#14d6150/initial] (3) [perdir C:/dev/www/] strip per-dir prefix: C:/dev/www/ ->
::1 - - [13/Aug/2013:17:32:25 +0200] [localhost/sid#9ba980][rid#14d6150/initial] (3) [perdir C:/dev/www/] applying pattern '^([^/\.]+)/(.*)' to uri ''
::1 - - [13/Aug/2013:17:32:25 +0200] [localhost/sid#9ba980][rid#14d6150/initial] (1) [perdir C:/dev/www/] pass through C:/dev/www/
::1 - - [13/Aug/2013:17:32:25 +0200] [localhost/sid#9ba980][rid#14dc168/subreq] (1) [perdir C:/dev/www/] pass through C:/dev/www/index.html
::1 - - [13/Aug/2013:17:32:25 +0200] [localhost/sid#9ba980][rid#14de170/subreq] (1) [perdir C:/dev/www/] pass through C:/dev/www/index.htm
::1 - - [13/Aug/2013:17:32:25 +0200] [localhost/sid#9ba980][rid#14dc168/subreq] (1) [perdir C:/dev/www/] pass through C:/dev/www/index.php
Davex
Profil
Soubor .htaccess s přepisovacími pravidly musí být v kořeni webu a aby to fungovalo, tak se v adrese musí vyskytovat nějaká cesta s lomítkem na konci.

Tzn.:
http://www.example.com/jedna/
http://www.example.com/jedna/dve/
http://www.example.com/jedna/dve/tri/

Vypadá to, že k přepisu se dostává pouze adresa http://www.example.com/.
GregHowe
Profil *
Davex:

Přiznám se že teď nerozumím. .htaccess je přeci v kořenovém adresáři webu.

v adrese musí vyskytovat nějaká cesta s lomítkem na konci a kde je zadaná ta adresa? Můžete to prosím rozvinout?
Camo
Profil
GregHowe:
Pozrite si vo firebugu ako prebieha komunikácia po sieti.
Davex
Profil
GregHowe:
kde je zadaná ta adresa?
Většinou je vidět v adresním řádku prohlížeče a je to URL požadované stránky. Webserver se z ní dozví, jakou stránku nebo soubor má prohlížeči odeslat.
GregHowe
Profil *
Uf. No v adrsním řádku je přeci jenom localhost a ten se adresuje na index a ten index vypíše echo "neni"


Čili teď patrně zase nevim jak to myslíte. Začínám mít obavu jestli to vůbec rozchodim


jako v tom .htaccess mi třeba funguje RewriteRule ^secure/captcha.jpg /captcha.php [L,QSA], tak co je šoatně když mi nejde ten zbytek?
Kajman
Profil
GregHowe

Pokud přistupujete jen na localhost a nedáváte za to žádnou cestu, ze které by se měl poznat jazyk, není nic divného, že se uvedená pravidla neaplikují a proměnná slug nebude nastavená.

Při zadání http://localhost/jedna/ to asi "neni" nevypíše.
GregHowe
Profil *
Nooo to vypíše jedna. Já ten regulární výraz nepsal. Takže problém je trochu komplexní že nemám moc představu o tom jak to funguje... se tedy snažním teď nějak začlenit ta Vámi popsaná pravidla. Taky už se obádám že působím jako idiot, ale nějak mi z toho pořád nedává smysl k čemu mi je že vím že http://localhost/jedna/ vypíše jedna. jako je to pokrok nějakej. ale já přeci potřebuju určit jazyk ... uložit ho do sešnu někam a podle toho pak už pořád přepisovat url podle toho. to potřebuju.


Jinak ale děkuji za trpělivost.
Kajman
Profil
Funguje to tak, že na začátku url vždy uvedete kód jazyka mezi prvními výskyty lomítka /. Když tam nedáte nic, tak prostě kód jazyka není.

Já ten regulární výraz nepsal
My také ne. Ale kód funguje tak, jak je napsaný. Nevím, co hledáte za složitosti.
GregHowe
Profil *
Jo jakože prostě v tom idexu teda napřed určim co je ta za jazyk a pak prostě jenom teda to přesněruju na to co vyšlo v url? takhle moc snadný to je jo? :DDD


No já už to teda chápu :D do toho slugu se tedy uloží všechno co mám v prvních lomítkách aha. Děkuji za pomoc :)
GregHowe
Profil *
ahoj chci se ještě dodatečně na něco zeptat. rozchodil jsem to a funguje to dobře jenom se tam děje taková věc, že když mám tedy :

localhost/cs/index.php?page=neco

a pak přejmenuju ten index na cokoliv jinýho ručně normálně v url, tak to stejně funguje. nevim jestli to něčemu vadí, ale mě to vlastně vadí, už to neodkazuje na 404 žádnym způsobem. jak bych tomu mohl zabránit v tom .htaccess?? mohl bych samozřejmně kontrolovat to uzl v indexu a kdyby to nesouhlasilo, tak to zase přesměrovat, ale to nevim jestli je správný postup.

v .htaccess mám na tu 404 - ErrorDocument 404 /error_404.php a to fungovalo do doby než jsem tam přidal tu multijazyčnost.

děkuji
Camo
Profil
GregHowe:
To už budeš musieť robiť "ručne" keď zistíš, že daný obsah v databáze nieje. Predpokladám teda, že stránky chceš ukladať do DB. Do toho .htaccessu treba ešte pridať
#ignoruj vsechny opravdove adresare
RewriteCond %{REQUEST_FILENAME} !-d
#ignoruj vsechy opravdove soubory (php skripty, obrazky, styly)
RewriteCond %{REQUEST_FILENAME} !-f
To treba dať pred každé rewriteRule pravidlo.
Lepšie by bolo podľa mňa vybrať všetko čo je za prvým lomítkom do query stringu a rozpitvať to v PHP.
Kajman
Profil
GregHowe:

V index.php musíte rozhodnout, zda chtěná stránka existuje a pak zobrazit její obsah, nebo že neexistuje a v tom případě vrátit hlavičku 404 a informovat o tom uživatele.
GregHowe
Profil *
Aha aha ... děkuju ty RewriteCond sem tam skutečně musel přidat vyřešilo to některé problémy které nestali... čili teď teda mám jedinou možnost že si teda uložim v indexu aktuální url, phpkem ho rozkuchat a zjistit jestli index se menuje index jo? v tom .htaccess už teda se to nějak nastavit nedá ano?
Camo
Profil
GregHowe:
Dá sa to všetko nastaviť aj v .htaccess, ale je to oveľa zložitejšie a pomalšie(podľa mojich skúseností).
Ja mám v .htaccess v podstate len jedno pravidlo:
RewriteRule (.*)$ index.php?url=%{REQUEST_URI} [L,QSA]
A vyjde z toho index.php?url=nieco/niekde/123 takže si len rozsekám ten QS cez lomítka.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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