Autor Zpráva
Jont
Profil
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
Nikomu se mic podobného nestalo?
Aesir
Profil
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 *
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
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
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
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
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
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 *
Tady jsou posány 4 způsoby, jak cyklení zmazit.
http://latrine.dgx.cz/hadanka-znate-mod_rewrite#comment-7359
Jont
Profil
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
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 *
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
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 *
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.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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