Starší komentáře ke článku: Mod_rewrite pro hezká URL - RewriteCond

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

Avatar

Autor komentáře: Stanislav Pecho

Datum vložení: 29.7.2005 13:21:20

no priklady jsou to sice pekne, ale napada me, kdyz napr. pomoci firewallu blokuji trasovani pohybu, tak HTTP_REFFER mi prohlizec neodesle...tim padem neuvidim zminovane obrazky ani tam, kde byy mely byt videt

Avatar

Autor komentáře: Michal Aichinger

Datum vložení: 29.7.2005 14:24:22

No to pak mate smulu :-)

Avatar

Autor komentáře: Navi

Datum vložení: 29.7.2005 15:08:10

pak budete mit zajiste ulozeno cookie ziskane pri prohlizeni webu - jinak, jak uz bylo psano, mate smulu.

Avatar

Autor komentáře: noname

Datum vložení: 29.7.2005 18:38:55

a není to náhodou naopak, tedy že když se tam referrer nepředá, tak že je naopak uvidíte odevšad? Pak se to bude imho chovat jako přímý zápis do prohlížeče a tedy se podle prvního pravidla stránka zobrazí

Avatar

Autor komentáře: Navi

Datum vložení: 30.7.2005 10:33:58

je to "pokud neni prazdne" a zaroven "neni example" a zaroven "neni www.example", tak se nezobrazi. asi by tam melo byt or :) jinak tem co si ho vypnou, taktez nezobrazit, pekne at se na obrazky koukaji z hlavni stranky...

Avatar

Autor komentáře: da

Datum vložení: 4.8.2005 13:29:09

myslim ze je to u tohoto jedno - pokud tam neni nic je to and a pokud mas vic jak 2 podminky musi tam byt

Avatar

Autor komentáře: materfaker

Datum vložení: 4.8.2005 18:46:04

a naco je dobre blokovat referer? aky to ma vyznam? a este by ma zaujimalo ako to firewall dokaze ked operuje na sietovej vrstve???

Avatar

Autor komentáře: FantomX1

Datum vložení: 8.8.2005 15:36:53

No ja osobne si myslim ze to dokaze kvoli tomu, ze hlavicku referer odosiela serveru prehliadac. Povedzme ze server na ktorom sa prave uzivatel nachadza odosle uzivatelovi HTTP_REFERER a tento odosle na dalsi server, inac si to predstavit neviem ze by server posielal hlavicku na iny server, to predsa proste nejde. Je tam vztah len server-uzivatel. I ked v niektorych pripadoch moze byt server aj zaroven klientom, ale predsa je len klient. To v tom pripade ze mate na svojom PC nainstalovany aj nejaky server. Ale na prehliadanie stranok aj tak stale pouzivate prehliadac a nie server, server vlastne k tomu ani urceny nie je, ale na odosielanie toho co si klient ziadal.

Avatar

Autor komentáře: materfaker

Datum vložení: 8.8.2005 19:02:24

[i]Povedzme ze server na ktorom sa prave uzivatel nachadza odosle uzivatelovi HTTP_REFERER a tento odosle na dalsi server[/i] no takto to nie je - ale to je jedno - mne ide o to, ze kvoli comu je dobre blokovat referer?

Avatar

Autor komentáře: Vojtech Schlesinger

Datum vložení: 8.8.2005 19:06:17

jen pokud nechcete, aby vam nekdo z cizich serveru odkazoval na obrazky (v tomto pripade :)). Nekteri lide to nemaji v lasce, jednak tim kradou traffic, a jednak se tak nemuzou lehce obrazky sirit treba bez nejakych doprovodnych textu apod...

Avatar

Autor komentáře: Leo

Datum vložení: 8.8.2005 19:21:55

"no takto to nie je - ale to je jedno - mne ide o to, ze kvoli comu je dobre blokovat referer?" Z duvodu ochrany soukromi - od nevinnych informaci typu na vase stranky jsem prisel z Googlu a hledal jsem to a to, az po vyzrazeni session (pokud se session id predava v URL a na stranky je mozne treba pres diskuzni forum strcit odkaz na cizi web, kam pak v hlavicce referer odejde URL i se session id). To druhe musi osetrit tvurce stranek. Leo

Avatar

Autor komentáře: Leo

Datum vložení: 8.8.2005 15:52:30

"a este by ma zaujimalo ako to firewall dokaze ked operuje na sietovej vrstve???" nevim cemu rikate sitova vrstva, ale rada firewallu meni obsah ktery pres ne preteka - od http hlavicek po html kod. Leo

Avatar

Autor komentáře: materfaker

Datum vložení: 8.8.2005 18:59:18

...ale to uz nie je firewall - to je potom "communication filter", pracujuci az na aplikacnej vrstve... ano viem o co ide - to som len rypal :-)

Avatar

Autor komentáře: halogan

Datum vložení: 29.7.2005 19:09:19

Jeste bych do toho blokovani refereru povolil Google, protoze ten muze byt dobrym zdrojem navstev.

Avatar

Autor komentáře: Kajman

Datum vložení: 1.8.2005 13:20:35

Kdepak, v tom žádný problém není. Výše uvedený příklad je korektní. Náhledy si dělá google vlastní a velké zobrazuje i s celou stránkou, na které je, takže bude mít referer správný (naše stránka bude mít referer z googlu, ale obrázky na ní budou mít referer už naši stránku). Snad jen by v tom přepisovacím pravidle, mohl být použit příznak NC (vypíná rozlišování velkých a malých písmen), aby se nemusely koncovky vypisovat malými i velkými písmeny.

Avatar

Autor komentáře: ml

Datum vložení: 1.8.2005 16:28:52

Zdravim. Pokusal som sa mod-rewrite rozchodit. Modul funguje bezchybne, ale zlikvidovali sa mi vsetky obrazky na stranke + formatovanie externym css-kom. Skusal som nahradit relativne cesty absolutnymi, ale bezvysledne. Zaujimave, ze sa to rovnako sprava na localhoste aj na hostingu. Neviete mi niekto poradit, v com by mohol byt problem? Dakujem

Avatar

Autor komentáře: Kajman

Datum vložení: 1.8.2005 16:52:06

Typický problém v případě, že je dělána jakoby adresářová struktura. Ještě jednou zkontroluj adresy k obrázkům a ke stylům. Při použití správných absolutních adres by to mělo být ok.

Avatar

Autor komentáře: Leo

Datum vložení: 2.8.2005 9:03:27

A kdyz uz tak zvesela posilate ruzny obsah pro ruzne HTTP hlavicky v pozadavku prohlizece, posilate taky v odpovedi hlavicku Vary? Nebo na kesovani po ceste kaslete? Leo

Avatar

Autor komentáře: Karlos

Datum vložení: 4.8.2005 15:32:16

Jde otestovat zamezení linkování obrázků z cizích serverů i na loaclu na mém pc??? Prosím poraďte. Nechci to zkoušet rovnou na serveru, jelikož s tím nemám ještě žádnou zkušenost. Díky za rady

Avatar

Autor komentáře: Karlos

Datum vložení: 4.8.2005 15:33:09

Omlouvám se mělo to být na localu.

Avatar

Autor komentáře: Vojtech Schlesinger

Datum vložení: 8.8.2005 17:08:59

docela jednodusse - nazev serveru se jen zmeni na localhost. Samozrejme musite mit naistalovany mod_rewrite - viz prvni dil.

Avatar

Autor komentáře: TimeLord

Datum vložení: 4.8.2005 17:07:21

Ja som raz skusal zakazat odkazy na moje obrazky z inych webov bez mod_rewrite takto: SetEnvIfNoCase Referer "^http://moj_server1/" local_ref=1 SetEnvIfNoCase Referer "^http://moj_server2/" local_ref=1 SetEnvIfNoCase Referer "^http://moj_server3/" local_ref=1 SetEnvIf Referer "^$" local_ref=1 <FilesMatch ".(gif|jpg|png|swf)"> Order Allow,Deny Allow from env=local_ref </FilesMatch> Obrazky sa zobrazili len tym, co posielali ako Referer niektory z mojich webov alebo nemalli nastaveny ziadny Referer (vela ludi, vratane mna si vo FF vypina posielanie Referer). Akoze ochrana nic moc, ale aspon niektorych, co nevedia o co ide, to odradi :-)

Avatar

Autor komentáře: Vesta

Datum vložení: 5.8.2005 9:15:29

Díky za užitečný článek. Je pravda, že jednotný tvar URL je důležitý pro SEO. Je možné nastavit Mod_rewrite tak, aby se všechny adresy bez www přesměrovaly na verzi s www mimo vybraných adresářů (aby fungovala např. adresa http://admin.example.com ale už ne adresa http://example.com). Díky za odpověď.

Avatar

Autor komentáře: Vojtech Schlesinger

Datum vložení: 8.8.2005 17:11:34

staci pouzit RewriteCond... RewriteCond %{HTTP_HOST} !^admin.example.com toto by mohlo fungovat :) (netestovano)

Avatar

Autor komentáře: Vesta

Datum vložení: 9.8.2005 9:19:39

Zkušel jsem to takto, ale bohužel mi to nefunguje :-( RewriteEngine On RewriteCond %{HTTP_HOST} ^example\.com RewriteCond %{HTTP_HOST} !^admin.example.com RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,QSA] RewriteCond %{HTTP_HOST} ^www\.example\.com RewriteRule ^(.*)\.html$ %{DOCUMENT_ROOT}/index.php?stranka=$1 [L,QSA]

Avatar

Autor komentáře: Vojtech Schlesinger

Datum vložení: 9.8.2005 9:38:26

jojo zapomnel jsem escapovat :) zkuste tam jeste pridat [OR], mrknout se do logu, popsat co to dela ;)

Avatar

Autor komentáře: Tony

Datum vložení: 12.8.2005 2:40:47

Zajímalo by mě, zda lze automatické přesměrovávání z www.example.cz na adresu bez www (viz. www.interval.cz) provést i bez mod_rewrite (jednodušeji), např. mod_alias či jinak (příklad:)? Díky.

Avatar

Autor komentáře: Kajman

Datum vložení: 12.8.2005 9:58:38

Třeba si udělat virtualhost www.example.com a u něho dát RedirectMatch (.*)$ http://example.com$1

Avatar

Autor komentáře: Jan.H.

Datum vložení: 15.8.2005 17:25:16

zdravim, spravil som si jeden vetsi test pomocou mod_rewrite modulu na jednej z mojich stranok. dovolim si tvrdit ze nejake male skusenosti s mod_rewrite uz mam, vysledok bol zaujimavy, 80% navstevnikov na stranku pochadzalo z google, konkretne denne priemer cca 5-7tis unikatnych navstevnikov... problem nastal, ked mi zacal padat server, vypal som mod_rewrite(zacal som pouzivat povodne url) a vsetko uz v bolo v pohode. moja otazka speje teda na HW zataz serverov, je mozne ze mod_rewrite ako modul extremne zatazuje server? v top bol na poprednych prieckach apache a nie mysql, ako to byva zvykom... dakujem za reakcie a moznosti optimalizacie

Avatar

Autor komentáře: Kajman

Datum vložení: 16.8.2005 13:55:25

Zkontrolujte si, zda nemáte zapnutý v konfiguraci log od rewrite. Vypíná se pomocí (nelze v .htaccess) RewriteLogLevel 0 nebo tuším i zakomentováním RewriteLog. A obecně se uvádí, že mod rewrite dokáže extremě zatížit server. Pokud je tam hodně přepisovaní (a třeba i dynamické přepisovací mapy), tak to bude asi tím. Možná by pomohlo zkusit optimalizovat pravidla.

Avatar

Autor komentáře: dgx

Datum vložení: 26.10.2005 23:40:24

Ve článku uvedený postup pro přesměrování z example.com na www.example.com má jednu záludnou chybu, která se projeví při předávání speciálních znaků v URL. Například example.com?param=%2A změní na www.example.com?param=%252A, tedy v parametru param dostaneme namísto řetězce "*" řetězec "%2A". Je proto třeba explicitně escapování vypnout a to přidáním parametru NE (noescape). Tedy opravený příklad by zněl: RewriteEngine On RewriteCond %{HTTP_HOST} ^example\.com RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,QSA,NE] (možná by to bylo vhodné opravit přímo v článku, nehezky jsem se na tom vypekl ;-)

Avatar

Autor komentáře: Kajman

Datum vložení: 3.11.2005 10:13:34

Mělo by stačit i vypustit QSA (i s NE). Pokud totiž není v nové adrese query string, přidává se automaticky a problémy s escapováním nejsou. RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

Avatar

Autor komentáře: dgx

Datum vložení: 5.11.2005 1:36:08

Ano, QSA je možné vypustit. 'NE' nikoliv, protože i při automatickém předání query string dochází k escapování.

Avatar

Autor komentáře: dgx

Datum vložení: 26.4.2006 13:53:19

Cituji: ---------- RewriteCond %{HTTP_HOST} ^example\.com RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,QSA] Všimněte si, že toto pravidlo není konečné (není L), protože jsme jenom upravili adresu na "www" verzi a v dalším pravidle s ní ještě budeme pracovat. -------------------- Je třeba si uvědomit, že přesměrováním na variantu s "www" jsme pouze změnili zpracovávané URI, nikoliv proměnnou %{HTTP_HOST}, takže následující pravidlo se už neprovede. Dále díky přesměrování R=301 se "interní" pravidla stanou "externími", tedy v adresním řádku prohlížeče uvidíme 'index.php?stranka=xxx', což většinou není záměr. Proto je vhodné přesměrování udělat konečným pravidlem (příznak L). Drobnost - není třeba extra závorkovat hledaný výraz, stačí RewriteRule ^.*$ http://www.example.com/$0 Dále není třeba používat příznak [QSA], protože substituce neobsahuje ? a tudíž parametry se překlopí automaticky. Co je však nezbytně nutné, tak použít příznak [NE], vysvětlení najdete v předchozím komentáři. Tedy nejvhodnější zápis je: RewriteCond %{HTTP_HOST} ^www\.example\.com$ RewriteRule ^.*$ http://example.com/$0 [R=301,NE,L] Další pravidla se provádějí až po redirektu. Ještě poznámka - redirektem bohužel přijdeme o fragment URI, tedy text za znakem #.

Avatar

Autor komentáře: Petr Malina

Datum vložení: 6.12.2007 15:52:23

Ve Vasem priklade bych neuvadel RewriteRule ^.*$ http://example.com/$0 [R=301,NE,L] ale RewriteRule ^.*$ http://example.com$0 [R=301,NE,L] tzn. bez lomitka. Dochazi pak k jeho znovuvlozeni.

Avatar

Autor komentáře: Ján Koštial

Datum vložení: 8.10.2006 16:13:42

Prosím o radu - nie som zbehlý v regexp. Prevádzkujem stránky, ktoré majú subdomény. domena.sk subdomena1.domena.sk subdomena2.domena.sk Ako dosiahnuť, aby sa takéto URI www.domena.sk www.subdomena1.domena.sk www.subdomena2.domena.sk presmerovali na tvar uvedený vyššie? Teda aby sa www odstránilo aj zo subdomén?

Avatar

Autor komentáře: Ado12

Datum vložení: 6.2.2007 19:20:35

dobrý deň mám zápis v .htaccess RewriteRule ^(.*)\.html$ index.php?cIndex=$1 [L,QSA] neviete mi niekto prosím poradiť ako zapísať odkaz na ďaľší súbor napr. informacie.php ktporý je v tom istom adresári ako index.php ? ono mi to totiž všetko smeruje iba na index.php ďakujem

Avatar

Autor komentáře: longin

Datum vložení: 29.6.2007 5:35:45

Nic co by nebylo v dokumentaci od apache ...

Avatar

Autor komentáře: longin

Datum vložení: 29.6.2007 5:37:51

Teda, tohle presne JE v dokumentaci slovo od slova ...

Avatar

Autor komentáře: to je jedno

Datum vložení: 13.2.2008 18:51:36

Pokud se nepletu, tak dokumentace není česky. A jestli si myslíš, že každej kdo to potřebuje umí anglicky tak dobře, aby to odtamtud přečet, tak je tvůj mozek totálně k hovnu.

Avatar

Autor komentáře: Otto

Datum vložení: 23.7.2007 23:22:55

Mám dvě domény na jednom webhostingu a potřebuju aby po zadání jedné domény se přesměrovalo do určitého adresáře, tzn. po zadání www.example2.com se přesměrovalo do www.example2.com/test/ Může mi prosím někdo poradit, jak na to???? Už se s tim trápit dva dny :(( Díkyy

Avatar

Autor komentáře: Kepi

Datum vložení: 24.7.2007 16:30:37

RewriteCond %{SERVER_NAME} ^www\.example2\.com RewriteCond %{REQUEST_URI} !(test) RewriteRule ^(.*)$ http://www.example2.com/test/$1 [R,L]

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