Autor | Zpráva | ||
---|---|---|---|
Jont Profil |
#1 · Zasláno: 8. 10. 2009, 21:34:47
Ahoj, dnej jsem se u sebe doma snažil rozchodit hezké url přes mod rewrite a zpočátku to šlo, ale pak jsem chtěl stránku přesměrovat na tu co se zobrazuje a hlásí to chybu 403 - forbidden, že k té stránce nemám přístup.
Lepší asi bude dát kód: ( RewriteEngine on tam samozřejmě je) toto funguje: RewriteRule ^stranka-([0-9]+)$ test.php?id=$1 a toto ne(403): to stejné plus [R] na konci Ještě nefunguje 404 dokument: ErrorDocument 404 /404.php Při zadání neexistující adresy se vypíše 403 + že ten 404 soubor nebyl nalezen. Horší je, že někdy nefunguje ani to první a třeba se zakáže přístup ke všem souborům v adresáři. Smazat .htaccess taky nepomůže. Apache si ty hodnoty v .htaccess nějak ukládá a pamatuje nebo co? Nebo prohlížeč? Restart jsem zkoušel a nic. Můžete mi prosím poradit? To se to takhle divně chová pořád? Na webovém serveru se mi experimentovat nechce, nechci si zničit web, že ano. (poznámka: můj cíl je rozchodit kód na přesměrování dynamické adresy na hezkou, tj. něco takového: RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ RewriteRule ^test\.php$ stranka-%1? [R] RewriteRule ^stranka-([0-9]+)$ test.php?id=$1 ) |
||
Jont Profil |
#2 · Zasláno: 9. 10. 2009, 10:04:51
Nikomu se mic podobného nestalo?
|
||
Aesir Profil |
#3 · Zasláno: 9. 10. 2009, 13:39:20
Jont:
„toto funguje: RewriteRule ^stranka-([0-9]+)$ test.php?id=$1 a toto ne(403): to stejné plus [R] na konci “ Máte nastavenou hodnotu RewriteBase? A pokud ne, neměl byste? :) Zkuste prostudovat pořádně manuál, hlavně tu tabulku jak se nahrazuje v určitých případech. |
||
Kajman_ Profil * |
#4 · Zasláno: 9. 10. 2009, 15:06:16
To se to takhle divně chová pořád?
Kdepak, tohle je nějaká divná divnost. Doporučuji zapnout rewritelog pro ladění. Tam třeba zjistíte, že se to cyklí nebo jinou nečekanou neplechu. |
||
Joker Profil |
#5 · Zasláno: 9. 10. 2009, 15:11:55
Kajman:
„Tam třeba zjistíte, že se to cyklí“ Mě taky napadlo, že se to zacyklí, jenže to obvykle vyprodukuje 500 (internal server error) a ne 403. |
||
Davex Profil |
#6 · Zasláno: 9. 10. 2009, 16:42:31
V pravidle s příznakem [R] nelze používat pro cíl přesměrování relativní cestu. Cesta musí začínat lomítkem nebo to musí být kompletní URL s "http://" na začátku.
|
||
Aesir Profil |
#7 · Zasláno: 9. 10. 2009, 16:53:37
Davex
„V pravidle s příznakem [R] nelze používat pro cíl přesměrování relativní cestu. Cesta musí začínat lomítkem nebo to musí být kompletní URL s "http://" na začátku.“ Neplatí toto náhodou jen pro možnost, kdy je rewrite rule definován v httpd.conf? V .htaccess, tedy adresářové konfiguraci, by to neměl být problém. |
||
Davex Profil |
#8 · Zasláno: 9. 10. 2009, 17:13:18
Aesir
Ano, ale platí to pouze v případě, že je definováno RewriteBase. V opačném případě to může způsobovat přesně tu chybu co psal Jont. Pokud tam ale nemá ještě nějaká další pravidla. |
||
Jont Profil |
#9 · Zasláno: 9. 10. 2009, 22:30:00 · Upravil/a: Jont
No jo, na to rewritebase jsem zapomněl. Nastavil jsem tedy cestu od rootu a už se neobjevuje ta chyba 403, ale napíše se 302 found a na tu stránku se to sice jako přesměruje, ale napíše se věta The document has moved here. a neprovede se ten další krok(podstrčení test.php?id=1).
Když chci přesměrovat jenom stranka-1 na test.php?id=1 a smažu ten kód předtím, tak to funguje. Takže fakt nevím, v čem je s tím přesměrováním problém. Poradíte ještě? P.S.: Ten 404 error jsem vyřešil - byla špatně ta cesta (je jasné, že / znamená root, takže jsem tam dal kde to přesně mám). P.S.2: Firefix mi hlásí Smyčka při přesměrování, to jsem z toho jelen. |
||
Kajman_ Profil * |
#10 · Zasláno: 9. 10. 2009, 23:04:34
Tady jsou posány 4 způsoby, jak cyklení zmazit.
http://latrine.dgx.cz/hadanka-znate-mod_rewrite#comment-7359 |
||
Jont Profil |
#11 · Zasláno: 10. 10. 2009, 13:36:54
Tak jsem tam dal před to tu podmínku
RewriteCond %{ENV:REDIRECT_STATUS} !^$ RewriteRule .* - [L] a funguje to. Díky všem! |
||
Jont Profil |
#12 · Zasláno: 10. 10. 2009, 16:12:46
Ještě něco:
Dělají se ty adresy domena.cz/velky-clanek tak, že se do db uloží upravený název toho článku a pak se ten místo id použije k vyhledání v db, jo? Nebo nějak jinak? Taky mi nejde udělat, aby fungovalo to url ve tvaru domena.cz/velky-clanek . Dělám to tímto kodem: RewriteRule ^([^/]+)$ stranka.php?nazev=$1 Se to nějak pokazí a zjistil jsem, že nazev se rovná ne tomu co tam zadám ale je tma stranka.php (nazev=stranka.php). Když ale dám příponu html, tak to funguje: RewriteRule ^([^/]+)\.html$ stranka.php?nazev=$1 Lepší by to bylo bez toho .html, tak jestli mi ještě můžete poradit. Díky |
||
Kajman_ Profil * |
#13 · Zasláno: 10. 10. 2009, 16:23:28
V rewritelogu byste zjistil, že stranka.php?nazev=velky-clanek se ještě podle toho pravidla přesměruje jednou na stranka.php?nazev=stranka.php
Vhodné je použít test, zda soubor nebo adresář s takovým jménem už neexistuje... http://diskuse.jakpsatweb.cz/.sandbox/?action=vthread&forum=31&topic=97298#1 |
||
Jont Profil |
#14 · Zasláno: 10. 10. 2009, 18:02:38
No já ten rewritelog nikde nemůžu najít. Ale dal jsem tam ty dvě podmínky a už to funguje. Tak dík.
Jinak odpověď na tu mou otázku je teda ano (jak se dělají ty url)? Asi jo. |
||
Kajman_ Profil * |
#15 · Zasláno: 10. 10. 2009, 19:47:21
Ano, když tu adresu z url budete mít v samostném sloupečku uloženou, tak si na něm můžete udělat unikátní index a vyhledávání nebude o moc pomalejší než podle primárního klíče.
|
||
Časová prodleva: 15 let
|
0