Portál AbcLinuxu, 10. května 2025 20:02

Dotaz: Apache a Rewrite

16.8.2012 15:30 tlamik | skóre: 21 | Karvina
Apache a Rewrite
Přečteno: 183×
Odpovědět | Admin
resim takovou blbost, potrebuji, aby kdyz nekdo zavola webove url, ktere neexistuje, tak aby se mu to presmerovalo na default napr zavola www.domena.cz/provoz/hala/soubor.html, ktera neexistuje aby ho to presmerovalo na www.domena.cz/provoz/hlavni/soubor.html a nejsem schopen napsat ten spravny RewriteRule :(
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

16.8.2012 18:32 NN
Rozbalit Rozbalit vše Re: Apache a Rewrite
Odpovědět | | Sbalit | Link | Blokovat | Admin
Hm... treba:
RewriteRule ^/provoz/hala/soubor.html$ www.domena.cz/provoz/hlavni/soubor.html [R,L]
17.8.2012 07:53 tlamik | skóre: 21 | Karvina
Rozbalit Rozbalit vše Re: Apache a Rewrite
psal jsem url, ktere neexistuje, napr. hala/soubor.html, tvuj priklad zajisti pouze to, kdyz nekdo zavola /provoz/hala/soubor.html, ale co kdyz zavola /provoz/kotelna/soubor.html ?
MMMMMMMMM avatar 16.8.2012 23:55 MMMMMMMMM | skóre: 44 | blog: unstable | Valašsko :-)
Rozbalit Rozbalit vše Re: Apache a Rewrite
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co je myšleno tím defaultem? :) dá se kontrolovat existence souboru nebo adresáře a pokud neexistuje, pak následně provést přesměrování třeba na hlavní stránku
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Linux Dokumentační Projekt - PDF ke stažení
17.8.2012 07:19 tlamik | skóre: 21 | Karvina
Rozbalit Rozbalit vše Re: Apache a Rewrite
presne tak jsem to myslel, kontrolovat, jestli existuje adresar a kdyz ne, tak presmerovat resp. rewritovat vsechny url na default adresar (napr. hlavni). Jde o to, ze na serveru je nekolik adresaru a v nich je stejna struktura, napr. usni, nosni, krcni, urologie pod nima je vzycky stejna stromova struktura, jde o to, kdyz nekdo rucne napise (blbe) nazev budovy (oddeleni), tak aby ho to presmerovalo na hlavni budovu, kde jsou odkazy. Nechci to resit univerzalni 404kou. Testoval jsem tohle:
RewriteEngine On
#RewriteBase /template/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule template/*/(^/*)$ template/default/$1 [R,L]
#RewriteRule ./template/^.$ ./template/default/$ [R=301,L]
#RewriteRule ^template/(.*)$ template/default/$1 [R=301,L]


template je existujici adresar, pod nim jsou dalsi podadresare, ale kdyz nekdo zavola neexistujici adresar (nap. template/pokus/test.jpg), tak se to presmeruje na template/default/test.jpg, cili provede se pouze nahrada prostredniho adresare.
17.8.2012 10:36 tlamik | skóre: 21 | Karvina
Rozbalit Rozbalit vše Re: Apache a Rewrite
tohle castecne funguje:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule template/.*[/](.*)$ /template/default/$1 [L,R]

cili kdyz nekdo zada spatny adresar nebo i vice spatnych adresaru, tak hoto presmeruje do default, ale kdyz treba zada adresare dobre, ale jmeno souboru blbe, tak mi to hodi Chyba 310(net::ERR_TOO_MANY_REDIRECTS): Proběhlo příliš mnoho přesměrování.
17.8.2012 12:21 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Apache a Rewrite
Protože tam je cíl /template/default/$1 a $1 se rozvine i s názvem souboru a ten neexistuje a už je to ve smyčce.
Zkuste:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule template/.*[/](.*)$ /template/default/index.php?badurl=$1 [L,R] 
a v tom /template/default/index.php si to vypište get-ovou proměnou badurl.
Možná stačí něco jako:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule template/.*$ /template/default/index.php [L,R] 
Trošku mě sice matou ty dvě RewriteCond spojené AND, ale mám dnes hodně špatný den…
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
17.8.2012 12:46 tlamik | skóre: 21 | Karvina
Rozbalit Rozbalit vše Re: Apache a Rewrite
tu smyčku chápu, jen nevím jak se jí rozumně zbavit. chci defacto dvě věci nahradit neexistující podadresář pokud jej někdo omylem zavolá, ALE zbytek nechat tak jak je a dále pak udělat kontrolu, jestli po rewritu existuje cíl a pokud ne, tak teprve přesměrovat na nějaký jednoznačně jedinečný adresář.
máme cca takovou strukturu adresářů:

/template/pink/horni/mrakyobrazku.jpg
/template/pink/dolni/mrakyobrazku.jpg
/template/pink/stredni/mrakyobrazku.jpg
/template/yellow/horni/mrakyobrazku.jpg
/template/yellow/dolni/mrakyobrazku.jpg
/template/yellow/stredni/mrakyobrazku.jpg
/template/default/horni/mrakyobrazku.jpg
/template/default/dolni/mrakyobrazku.jpg
/template/default/stredni/mrakyobrazku.jpg

mrakyobrazku.jpg ma znamenat stovky ruzny jpg souborů. čili pokud někdo splete "barvu" a napise /template/modra/stredni/xxxx.jpg, tak se mu linky pregeneruji na /template/default/stredni/xxxx.jpg a pokud ani tento link nebude existovat, tak se teprve presmeruje treba na index.html. Proměnná $1 je IMHO podle popisu to co je v závorkách v mém případě tedy "stredni/xxxx.jpg" což je správně a tak to chci. Problém je, jak zajistit, aby se zkontroloval už rewritovaný odkaz a nezacyklil.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.