Starší komentáře ke článku: Mod_rewrite pro hezká URL - RewriteBase a RewriteCond podrobněji

Zpět na článek | Úvodní stránka Interval.cz

Avatar

Autor komentáře: vasilisa

Datum vložení: 21.4.2006 8:46:36

HTTP_ACCEPT je proměnná, která umožňuje zjistit, jestli prohlížeč akceptuje např. application/xhtml+xml Stejně tak v JavaScriptu už se dávno nepoužívají definice: if (prohlizec == MSIE) && (verze >= 5) funkceJS1.5(); ale if isobject(funkceJS1.5()) funkceJS1.5(); právě proto, aby se podchytily VŠECHNY prohlížeče teď i budoucnu.

Avatar

Autor komentáře: Vilém Málek

Datum vložení: 21.4.2006 10:04:36

Jakou souvislost to má s článkem? Ale mimochodem, když už jsme u toho, HTTP_ACCEPT nejsou prohlížeče povinny posílat a neexistuje předpis, co v této hlavičce má být. Nehledě na to, že mnohé proxyservery, firewally a podobné programy tyto hlavičky filtrují a buď je omezují na daný rozsah nebo zcela mažou ;-)

Avatar

Autor komentáře: Dundee

Datum vložení: 22.4.2006 12:47:57

Asi jsem hodně mimo mísu, ale mohl by mi někdo vysvětlit, co znamená toto: [^.^/] Byl jsem přesvědčen, že metaznak ^ uvnitř množinového metaznaku [] uvozuje výčet znaků, které nesmí kontrolovaný řetězec obsahovat, aby vyhovoval reg.výrazu. Proč ale za ^ následuje . ? Pochopil bych kdyby tam bylo ^\. tedy, že řetězec nesmí obsahovat tečku, ale toto znamená co? Že řetězec nesmí obsahovat žádný znak?:-)

Avatar

Autor komentáře: dgx

Datum vložení: 27.4.2006 7:13:29

Znamená to, že řetězec nesmí obsahova tři znaky . ^ / (ale nevím, z jakého důvodu nesmí . a ^ obsahovat)

Avatar

Autor komentáře: Dundee

Datum vložení: 20.5.2006 21:15:59

Takto jsem to také pochopil,ale znak . je přece v regulárních výrazech metaznak, který zastupuje všechny znaky... Proč není tento výraz ve tvaru: [^\.\^/] ? Tvar [^.^/] mi přijde podivný.

Avatar

Autor komentáře: dusan h.

Datum vložení: 22.5.2006 15:54:32

nemylim-li se pak uvnitr [ ] se prave tecka za metaznak nepovazuje a pise se jako . nikoliv jako \. D.

Avatar

Autor komentáře: Kajman

Datum vložení: 22.4.2006 23:23:27

Fajn, že seriál pokračuje. Pár poznámek k vylepšení příkladu na stahování obrázků. Pokud ten obrázek neexistuje, tak by pak měl ze slušnosti vracet index.php kód 404. Původní příklad s tím nemá problém. A v tom druhém běhu, kdy se mění mime-type, už přece je testování na existenci souboru zbytečné. Pokud by nebyl, tak už se tam nedostane. A to RewriteBase je lepší využívat v případě, že web je nakonfigurován přes VirtualDocumentRoot, protože %{DOCUMENT_ROOT} pak obsahuje nepotřebnou cestu a díky RewriteBase lze použít relativní cesty při přesměrování.

Avatar

Autor komentáře: Breďák

Datum vložení: 24.4.2006 9:09:04

Mám trochu problém začínám s rewritw modem a: podmínka: RewriteRule ^(.*)/kategorie-([0-9a-zA-Z_\%]*)[\.html] /index.php?kategorie=$1&kat=$2 mi vezme adresu http://www.prcka.cz/Vtipy/kategorie-Chlapecek a holcicka.html ale už mi nepřeloží adresu: http://www.prcka.cz/Vtipy/kategorie-O bohu.html Mám problémy s adresami s mazerama. Některé mi to vezme a některé ne.

Avatar

Autor komentáře: dgx

Datum vložení: 27.4.2006 7:11:09

Vojto nezlob se, ale informace o RewriteBase a používání %{DOCUMENT_ROOT} v RewriteRule jsou naprosto nesmyslné. Jak to funguje doopravdy: Apache dostane požadavek na soubor http;//example.cz/soubor a automaticky jej prevede na fyzickou adresu třeba d:/web/soubor. Před zpracováním .htaccess fyzickou cestu odstraní, aby ji zase po dokončení zpracování přidal. Takže do .htaccess vstupuje jen "soubor" a Apache si pamatuje "d:/web/". RewriteRule ^soubor$ novynazev změní "soubor" na "novynazev". Apache poté přidá fyzickou cestu a je z toho "d:/web/novynazev". Co obsahuje %{DOCUMENT_ROOT} přitom nikdy nevíme a nelze na to spoléhat! NIKDY TO V .htaccess NEPOUŽÍVEJTE! Podívejme se ale na situaci, kdy nám jde o přesměrování přes 301. Teď přemýšlejte, k čemu povede zápis RewriteRule ^soubor$ novynazev [R] No k přesměrování na http;//example.cz/d:/web/novynazev - což je nežádoucí. Od toho tu máme RewriteBase, kterým můžeme Apache říct, jakou URL-cestu má před přesměrováním k souboru přidávat (namísto té, co si pamatuje). Takže RewriteBase / RewriteRule ^soubor$ novynazev [R] provede zamýšlené přesměrování na http;//example.cz//novynazev

Avatar

Autor komentáře: Petr Havlík

Datum vložení: 29.4.2006 23:03:07

Nevíte někdo, jak nastavit, aby mi to nepřepsalo url v prohlížeči? Sice mi to přesměruje, ale nějak jsem nenašel, jak to udělat, aby zůstalo zobrazeno to vstupní URL.

Avatar

Autor komentáře: Petr Havlík

Datum vložení: 29.4.2006 23:47:03

Odpovím si sám. Pokud se napíše absolutní cesta, tak to přesměruje. S %{DOCUMENT_ROOT} mi to nefungovalo, tak jsem nakonec hodil jen relativní cestu a jede to pěkně.

Avatar

Autor komentáře: Vilém Málek

Datum vložení: 30.4.2006 0:18:26

Musíte rozlišovat dvě různé věci, které mod_rewrite dělá. Tou první je přesměrování, tou druhou je přepisování. Pokud nestanovíte jinak, mod_rewrite bude provádět přepisování - vezme obsah "cílové" stránky a předá ji prohlížeči, jako by to byl obsah původně požadované, "výchozí" stránky. V tomto případě se v prohlížeči bude ukazovat stále ona původně požadovaná (výchozí) URL. Toto je také výchozí nastavení chování mod_rewrite. Přeměrování znamená, že mod_rewrite vezme pravidlo, kde je jako "výchozí" nastavena URL, kterou prohlížeč požaduje, a přepošle prohlížeči "cílovou" URL, která tu původní nahrazuje. Prohlížeč pak už sám vyrazí stáhnout onu cílovou URL a podle toho změní i zobrazovanou adresu. Přesměrování je pro mod_rewrite alternativním chování, které se zapíná speciálními příkazy v hranatých závorkách. Například [R=301] způsobí přesměrování prohlížeče na cílovou URL pomocí hlavičky http protokolu "HTTP/1.1 301 Moved Permanently", což je asi ten nejčastěji požadovaný způsob ;-)

Avatar

Autor komentáře: Petr Havlík

Datum vložení: 30.4.2006 12:52:45

Já jsem přesměrování zapnuté neměl. Bylo to opravdu tím, že tam byla ta absolutní adresa.

Avatar

Autor komentáře: Vilém Málek

Datum vložení: 30.4.2006 12:53:37

...čímž jste právě to přesměrování zapnul ;-)

Avatar

Autor komentáře: firefox4free

Datum vložení: 6.5.2006 16:24:01

Zdravím vospolok. Mohli by ste mi niekto poradit s nasledovnym problemom? Chcel by som mat URL v tvare: http://www.server.sk/sub-dir/value/ ktora by smerovala na: http://www.server.sk/sub-dir/index.php?key=value .htaccess vyzera takto: RewriteEngine On RewriteRule ^/([^/]+)/(.+)/$ /$1/index.php?key=$2 Po zadani http://www.server.sk/sub-dir/value/ dostanem error 404 Page not found.

Avatar

Autor komentáře: Kajman

Datum vložení: 17.5.2006 23:57:37

Asi tam nemá být úvodní lomítko (a já bych tam nedával ani to druhé). A ještě bych hodně popřemýšlel, zdali se takto nepřepíše něco, co se přepisovat nemá. RewriteEngine On RewriteBase / RewriteRule ^([^/]+)/(.+)/$ $1/index.php?key=$2

Avatar

Autor komentáře: chosen

Datum vložení: 17.11.2006 15:04:35

Situace je taková: - obrázky mám umístěné ve složce /images/ - .htaccess je o jednu úroven výš, tj. /.htaccess jakmile zadám do prohlížeče adresu např: [i]http://localhost/test/slozka/[/i] změní se mi (bohužel) adresa obrázku na [i]http://localhost/test/slozka/images/[/i] všechny obrázky v indexu mám adresované relativně. v .htaccess mám tohle: RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)/$ index.php?page=$1 [L,QSA] nesetkali jste se s tím někdo? přisli jste na to, jak tomu zabránit? Díky

Avatar

Autor komentáře: chosen

Datum vložení: 17.11.2006 15:05:13

Situace je taková: - obrázky mám umístěné ve složce /images/ - .htaccess je o jednu úroven výš, tj. /.htaccess jakmile zadám do prohlížeče adresu např: [i]http://localhost/test/slozka/[/i] změní se mi (bohužel) adresa obrázku na [i]http://localhost/test/slozka/images/[/i] všechny obrázky v indexu mám adresované relativně. v .htaccess mám tohle: RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)/$ index.php?page=$1 [L,QSA] nesetkali jste se s tím někdo? přisli jste na to, jak tomu zabránit? Díky

Avatar

Autor komentáře: Marko

Datum vložení: 15.12.2006 10:53:09

Zdravím všechny fandy do PHP. Jsem tak trochu amatér , ale potřeboval bych nakopnout. Chtěl bych mít pěkné URL a už jsem toho zkusil mnoho ale pořád nevím kudy kam. Server je na Apachi a v souboru www mám .htaccess potřebovla bych aby tato adresa www.svetkocarku.cz/index.php?p=productsList&iCategory=26 se v prohlížeči ukazovala jako tato ale zároveň zůstal funkční. www.svetkocarku.cz/kocarky-trojkombinace/ prosím o radu. Díky moc

Avatar

Autor komentáře: MOOB

Datum vložení: 11.1.2007 16:09:44

Mam problem, kterej se uz v diskuzi resil. Nic mi vsak nepomaha. Vse mi funguje az na styly a obrazky. Jdou jen kdyz jim napisu absolutni cestu. Nejde to nejak osetrit? Muj .httaccess: RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+[^/])$ /$1/ [R=301,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /index.php?url=$1 [L,QSA]

Avatar

Autor komentáře: Apik

Datum vložení: 1.2.2007 1:39:53

Ahoj, nevíte někdo jak postrčit jako DocumentRoot jinou složku ve fyzickém DocumentRoot? Chci vlastně podstrčit adresář "www" jako www.adresa.tld Zkoušel jsem to takhle: RewriteCond %{SERVER_PORT} ^80$ RewriteCond %{HTTP_HOST} ^domena.cz$ RewriteRule ^(.*) http://www.domena.cz/$1 [R=301,QSA] RewriteRule ^/$ /www/ [L] ale bohužel :-( Zatím používám tohle RedirectMatch ^/$ http://www.domena.cz/www/ ale zde mi vadí viditelnost adresáře www v adrese. Budu vděčný za každou radu. Díky moc

Avatar

Autor komentáře: Apik

Datum vložení: 11.2.2007 18:40:29

Tak už jsem to vyřešil :-) RewriteCond %{HTTP_HOST} ^www\.domena\.tld$ [NC] RewriteCond %{REQUEST_URI} !^/web/ [NC] RewriteRule ^(.*)?$ /web/$1 [QSA,L] Tohle zatím funguje bez problemu.

Avatar

Autor komentáře: pavel777

Datum vložení: 17.10.2008 19:05:14

Zdravím všechny a mám prosbu. Navzdory všemu napsanému se mi nedaří vyřešit následující případ (všude se řeší něco trochu jiného). Potřebuji dříve používané http://www.neco.cz/index.php?page=kontakty změnit na novou stránku http://www.neco.cz/?page_id=10 V podstatě mi tam nevadí, že bude i nadále otazník, ale vyhledávače mají uloženou starou cestu a teď nefunguje. Rád bych tam přidal i 301... Díky moc, Pavel

Zpět na článek | Úvodní stránka Interval.cz