Autor | Zpráva | ||
---|---|---|---|
peteo Profil |
#1 · Zasláno: 14. 12. 2014, 04:21:36
dobrý deň, večer, ráno,
bojujem s revrite a stále neúspešne. preto teda pekne prosím o pomoc, možno tomu porozunmiem, keď to uvidím polopaticky. jedná sa o to, že niektoré externé odkazy smerujúce na stránku vyzerajú takto: http://co-to-je.sk/spresne.php%3Fdotaz%3DBelohorcov%25C3%25A1,%2520Zuzana a stránky vyhodia error404. odkaz by mal vyzerať http://co-to-je.sk/spresne.php?dotaz=Belohorcov%C3%A1,%20Zuzana resp. http://co-to-je.sk/spresne.php?dotaz=Belohorcová, Zuzana jedná sa mi najmä o zmenu sekvencie ... ?dotaz=... za php, kde je nesprávne vyhodnocovaná. môžete mi, prosím, ukázať, ako by malo byť v .htaccess ošetrené? (fakt som z toho jeleň) ďakujem. |
||
Taps Profil |
#2 · Zasláno: 14. 12. 2014, 12:38:31
peteo:
podle mě bude nutné upravit odkazy, které figurují v rámci dané stránky |
||
juriad Profil |
Taps:
Jde o externí odkazy. Tedy někdo jiný udělal chybu a peteo si té chyby všimnul a než, aby čekal na nápravu, tak by rád ten vadný odkaz zprovoznil přepisovacím pravidlem. Přeci jen se počítá každý příchozí odkaz. peteo: Správné pravidlo je: RewriteRule (.*)\?dotaz=(.*) $1?dotaz=$2 [R=301,L] , aby se do historie v prohlížeči ani nikam jinam neukládala chybná adresa a nevznikala duplicita ve vyhledávačích.
Podrobný log toho, co se děje při aplikování pravidla: [Sun Dec 14 22:56:15.824925 2014] [rewrite:trace3] [pid 15411] mod_rewrite.c(475): [client 127.0.0.1:44202] 127.0.0.1 - - [kod.localhost/sid#9d26b0][rid#be2cb0/initial] [perdir /srv/http/kod.djpw.cz/] strip per-dir prefix: /srv/http/kod.djpw.cz/spresne.php?dotaz=sdc -> spresne.php?dotaz=sdc [Sun Dec 14 22:56:15.824974 2014] [rewrite:trace3] [pid 15411] mod_rewrite.c(475): [client 127.0.0.1:44202] 127.0.0.1 - - [kod.localhost/sid#9d26b0][rid#be2cb0/initial] [perdir /srv/http/kod.djpw.cz/] applying pattern '(.*)\\?dotaz=(.*)' to uri 'spresne.php?dotaz=sdc' [Sun Dec 14 22:56:15.824995 2014] [rewrite:trace2] [pid 15411] mod_rewrite.c(475): [client 127.0.0.1:44202] 127.0.0.1 - - [kod.localhost/sid#9d26b0][rid#be2cb0/initial] [perdir /srv/http/kod.djpw.cz/] rewrite 'spresne.php?dotaz=sdc' -> 'spresne.php?dotaz=sdc' [Sun Dec 14 22:56:15.825004 2014] [rewrite:trace3] [pid 15411] mod_rewrite.c(475): [client 127.0.0.1:44202] 127.0.0.1 - - [kod.localhost/sid#9d26b0][rid#be2cb0/initial] split uri=spresne.php?dotaz=sdc -> uri=spresne.php, args=dotaz=sdc [Sun Dec 14 22:56:15.825010 2014] [rewrite:trace3] [pid 15411] mod_rewrite.c(475): [client 127.0.0.1:44202] 127.0.0.1 - - [kod.localhost/sid#9d26b0][rid#be2cb0/initial] [perdir /srv/http/kod.djpw.cz/] add per-dir prefix: spresne.php -> /srv/http/kod.djpw.cz/spresne.php [Sun Dec 14 22:56:15.825018 2014] [rewrite:trace2] [pid 15411] mod_rewrite.c(475): [client 127.0.0.1:44202] 127.0.0.1 - - [kod.localhost/sid#9d26b0][rid#be2cb0/initial] [perdir /srv/http/kod.djpw.cz/] strip document_root prefix: /srv/http/kod.djpw.cz/spresne.php -> /spresne.php [Sun Dec 14 22:56:15.825028 2014] [rewrite:trace1] [pid 15411] mod_rewrite.c(475): [client 127.0.0.1:44202] 127.0.0.1 - - [kod.localhost/sid#9d26b0][rid#be2cb0/initial] [perdir /srv/http/kod.djpw.cz/] internal redirect with /spresne.php [INTERNAL REDIRECT] [Sun Dec 14 22:56:15.825096 2014] [rewrite:trace3] [pid 15411] mod_rewrite.c(475): [client 127.0.0.1:44202] 127.0.0.1 - - [kod.localhost/sid#9d26b0][rid#be8e68/initial/redir#1] [perdir /srv/http/kod.djpw.cz/] strip per-dir prefix: /srv/http/kod.djpw.cz/spresne.php -> spresne.php [Sun Dec 14 22:56:15.825107 2014] [rewrite:trace3] [pid 15411] mod_rewrite.c(475): [client 127.0.0.1:44202] 127.0.0.1 - - [kod.localhost/sid#9d26b0][rid#be8e68/initial/redir#1] [perdir /srv/http/kod.djpw.cz/] applying pattern '(.*)\\?dotaz=(.*)' to uri 'spresne.php' [Sun Dec 14 22:56:15.825113 2014] [rewrite:trace1] [pid 15411] mod_rewrite.c(475): [client 127.0.0.1:44202] 127.0.0.1 - - [kod.localhost/sid#9d26b0][rid#be8e68/initial/redir#1] [perdir /srv/http/kod.djpw.cz/] pass through /srv/http/kod.djpw.cz/spresne.php |
||
peteo Profil |
#4 · Zasláno: 15. 12. 2014, 03:49:17
ďakujem, funguje, čomu som nesmierne rád.
len ma prekvapilo, že vlastne prepis RewriteRule (.*)\?dotaz=(.*) $1?dotaz=$2 je prepis seba samým (?dotaz= -> ?dotaz=), ak som to správne pochopil. prečo teda nemôže byť RewriteRule (.*)\%3Fdotaz%3D(.*) $1?dotaz=$2 %3Fdotaz%3D -> ?dotaz= ? --- ako vidieť, stále to ostáva pre mňa španielskou dedinou, preto je moja vďaka o to väščšia. ;) |
||
juriad Profil |
peteo:
Všimni si konce prvního řádku logu. Apache identifikuje soubor spresne.php?dotaz=sdc . Tedy dekódoval znaky zapsané procenty.
Ano, přepisuje to na ten samý, toho jsem si nevšiml (byl jsem zaujatý tím, že to funguje). Ale on funguje jakýkoli přepis, který se provede. To zajistí, že se znovu vytvoří URI a následně se znovu rozparsuje, tentokrát však nebude obsahovat procenta. Stejně funguje i pravidlo: RewriteRule (.*) $1 Ale to mé první má výhody: 1) je popisnější, je zřejmé proč tam je 2) přepisuje jen adresy, které jsou chybné 3) pokud má flag [R] (přesměrovává), tak se přesměrují jen chybné adresy a tím se stanou správnými. Pokud bys přesměrovával u toho triviálního pravidla (nahraď vše vším), tak bys vytvořil nekonečnou smyčku. Tedy použij to pravidlo ze [#3] spolu s přesměrováním (důvody přesměrování doufám chápeš). |
||
peteo Profil |
#6 · Zasláno: 16. 12. 2014, 02:09:14
keď som pochopil správne, v podstate sa len jedná o úpravu kódu (z nejakého windovsXXX na utf) - prepisuje znak s prefixom %XX na char?
|
||
juriad Profil |
#7 · Zasláno: 16. 12. 2014, 03:37:25
peteo:
Ne, jedná se o to, že někdo omylem prohnal skoro celý odkaz funkcí rawurlencode. Jde o kódování, které se používá pro parametry v URL, nikoli pro celé URL (tedy pokud nechceš předávat URL jako parametr v jiné URL). A tedy některé znaky jsou zakódované, přestože by být neměly a jiné jsou dokonce dvakrát. %3F je ? %3D je = %25 je % Samotné znaky (kromě několika vyjemnovaných) musí být takto zakódovány. A ty znaky jsou v UTF-8. á ve jméně Belohorcová je zakódované jako %C3%A1, což odpovídá dvojici oktetů C3A1, což je v UTF-8 znak http://www.fileformat.info/info/unicode/char/00e1/index.htm (má kód 00e1, ale v UTF-8 je zapsán jako c3a1). Popis zakódování: http://www.faqs.org/rfcs/rfc3986.html |
||
peteo Profil |
#8 · Zasláno: 16. 12. 2014, 09:22:34
někdo omylem prohnal skoro celý odkaz funkcí rawurlencode
jasné, vďaka, konečne to dostáva zmysel. ešte raz ďakujem za pomoc. |
||
Časová prodleva: 10 let
|
0