Autor | Zpráva | ||
---|---|---|---|
GregHowe Profil * |
#1 · Zasláno: 12. 8. 2013, 17:15:08
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] if(isset($_GET['slug'][0])){ echo $_GET['slug'][0]; exit; }else{ echo "neni"; $_GET['slug'][0] = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); } takže prostě ten get nechytí a nevim proč. Dělám to na localhostu. Nenapadá někoho něco? Děkuji. |
||
Davex Profil |
#2 · Zasláno: 12. 8. 2013, 19:07:17
Zkus zkontrolovat všechna potřebná nastavení.
|
||
GregHowe Profil * |
#3 · Zasláno: 12. 8. 2013, 23:50:19
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 |
#4 · Zasláno: 13. 8. 2013, 08:43:00
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 * |
#5 · Zasláno: 13. 8. 2013, 17:34:13
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 |
#6 · Zasláno: 13. 8. 2013, 21:31:43
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 * |
#7 · Zasláno: 14. 8. 2013, 05:56:10
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 |
#8 · Zasláno: 14. 8. 2013, 08:21:32
GregHowe:
Pozrite si vo firebugu ako prebieha komunikácia po sieti. |
||
Davex Profil |
#9 · Zasláno: 14. 8. 2013, 19:18:52
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 * |
#10 · Zasláno: 15. 8. 2013, 09:05:23 · Upravil/a: GregHowe
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 |
#11 · Zasláno: 15. 8. 2013, 09:38:52
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 * |
#12 · Zasláno: 15. 8. 2013, 10:24:24 · Upravil/a: GregHowe
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 |
#13 · Zasláno: 15. 8. 2013, 10:34:44
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 * |
#14 · Zasláno: 15. 8. 2013, 10:40:39 · Upravil/a: GregHowe
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 :) |
||
Časová prodleva: 3 dny
|
|||
GregHowe Profil * |
#15 · Zasláno: 18. 8. 2013, 16:20:35
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 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 |
#17 · Zasláno: 18. 8. 2013, 20:13:09
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 * |
#18 · Zasláno: 20. 8. 2013, 22:46:19
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 |
#19 · Zasláno: 21. 8. 2013, 08:37:03
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] |
||
Časová prodleva: 11 let
|
0