[ boccio @ 12.07.2003. 13:29 ] @
Imam pitanje (nedoumicu) vezanu za URL-ove tipa http://www.elitesecurity.org/tema/25130

Ono sto me zanima jeste kako se parsuje doticni URL. Jedna stvar koja mi je pala na pamet (uz malo brauzanja :) jeste da se odradi 404 strana koja bi taj url parsovala u nesto tipa prikaz.php?threadID=25130
Medjutim to me dovodi do pitanja (posto sam sam experimentisao sa tim na mom lokalnom apachu) da to ne radi ako u browseru klijenta nije odcheckirano "Show friendly HTTP error messages"... hm...Da li pricam gluposti, ili se ovo zaista ovako radi? A kad smo kod takvih URL-ova, sta mislite o ovom:
http://www.extremetech.com/category2/0,3971,23466,00.asp
da li je to na istu foru kao es, ili je nesto drugo u pitanju?

[ mikis @ 12.07.2003. 14:17 ] @
Jedna reč: mod_rewrite :) Pogledaj Apache dokumentaciju, naročito ovaj deo:

http://httpd.apache.org/docs/misc/rewriteguide.html

Citat:
A kad smo kod takvih URL-ova, sta mislite o ovom:
http://www.extremetech.com/category2/0,3971,23466,00.asp
da li je to na istu foru kao es, ili je nesto drugo u pitanju?


Moguće, mada mi po strukturi url liči kao da je iz Vignette StoryServera (mada su njihove stranice obično sa .html ekstenzijom). Vignette pravi jedan od najpopularnijih (i najskupljih) CMS-ova, koriste ga između ostalih CNET, Nokia i mnogi drugi. Imao sam negde strukturu URL-ova, otprilike prva cifra označava da li je strana iz keša ili ne, druga je oznaka korišćenog templejta, treća id samog dokumenta... ili tako nekako. Može se lako naći preko Google-a.
[ tOwk @ 12.07.2003. 15:56 ] @
Citat:
boccio:
Medjutim to me dovodi do pitanja (posto sam sam experimentisao sa tim na mom lokalnom apachu) da to ne radi ako u browseru klijenta nije odcheckirano "Show friendly HTTP error messages"... hm...Da li pricam gluposti, ili se ovo zaista ovako radi?


Konkretno, na ES-u se koristi mod_rewrite, koji je odličan alat, ali lako se prave greške i zbrlja čitav Apache ;-)

E sad, i tvoja ideja je korisna, naročito kada nije dostupan mod_rewrite.

E sad, Apači server omogućava da definišeš stranicu za svaku grešku, pa i za 404 koja označava da traženi resurs nije nađen. Ono što si ti propustio je da ti Apači dozvoljava da tu grešku ispraviš (što i ima smisla, npr. neko je ukucao „/trema/134“, a ti eto provališ da je njemu trebala „/tema/134“ i lepo ga preusmeriš).

Da bi to uradio, potrebno je da pošalješ novo „Status“ polje, sa odgovarajućim kodom za stanje (npr. ako tvoj program koji obrađuje grešku 404 pronađe odgovarajuću stranicu, postaviš Status na 200). Naknadno, Apači proverava da li je ovo zaglavlje u HTTP poruci prisutno, i ako jeste, od toga generiše kod za HTTP odgovor, i uključuje ga u sam odgovor, npr.:
Code:
200 U redu
Server: Apači 43.0.2 (bez mod_rewrite 1.3.100)
Content-type: text/html; charset=utf-8

<h1>Naaslooov</h1>


E sad, ako radiš sa nekim drugim serverom, možda treba koristiti nešto drugo umesto „Status: 200 U redu“.


Ako i dalje sumnjaš, pogledaj kako to radi na npr. http://alas.matf.bg.ac.yu/~mm01142/bilošta (ako strana ne postoji, dobićeš mapu stranica; mada, ovo je rađeno u Python-u, ali to nije preterano značajno). Jedina mana je što se u log fajlovima ipak zabeleži da je došlo i do greške, i to što ne sme da ti postoji ništa u direktorijumu u kojem želiš da „emuliraš“ mod_rewrite.
[ boccio @ 12.07.2003. 16:13 ] @
hvala na odgovorima. nisam znao za mod_rewrite, evo upravo brauzam po http://forum.modrewrite.com. Doduse dokumentacija sa apache-vog sajta mi deluje pomalo konfuzno :( , ali ipak....

Nego, sto se tice Content Management-a : gledam neke free codove sa HotScripts-a, medjutim ne vidim nesto slicno Vignette StoryServer-u... (da, znam, ako hocu free, ne moz' da valja...) . Cisto me interesuje da vidim neke code snippet-e da bih razumeo na koji nacin se to radi...da ga malo dublje shvatim...ako zna neko neki url, primer, stagod...

[ tOwk @ 12.07.2003. 16:19 ] @
A za one koje mrzi da gledaju RFC 2616 koji definiše kodove za stanje u HTT protokolu, evo i kratke liste najzanimljivijih:

Zahtev ispunjen
— 200 U redu — Sve je u redu, i traženi zahtev (bilo HEAD, GET, POST, PUT) će biti u potpunosti ispunjen. Ovo koristiti pri obradi adresa.
— 201 Napravljen — Evo, napravio sam ono što si tražio, i to smestio tamo gde pokazuje „Location“ polje
— 206 Delimični sadržaj — Evo, deo sadržaja (koristi se za nastavljanje sadržaja pomoću „Range“ polja) koji ste tražili

Prosleđivanje
— 300 Više izbora — Uglavnom za višejezičke stranice koje poštuju Accept-Language, ili za one stranice koje omogućavaju isporuku sadržaja u više formata (npr. text/xml, text/html, application/x-pdf, a sve pomoću „Accept“ zaglavlja)
— 301 Trajno izmešten — Resurs koji ste tražili je trajno izmešten na adresu koju navodi „Location“ polje (ukoliko tekući link imate među obeleživačima, treba da bude automatski izmenjen)
— 302 Nađen — privremeno izmešten resurs na adresu u „Location“ polju; ovo preporučujem za ispravljanje grešaka kakve navodim u prethodnoj poruci, npr. preusmeravanje sa „/trema/134“ na „/tema/134“
— 303 Vidi drugi — opet, prati „Location“ polje, ali sledeći zahtev uputi pomoću GET-a (ako je npr. korišćen POST, PUT)
— 304 Nije izmenjen — ako je poslat uslovni GET (ipak pročitajte HTTP/1.1 specifikaciju), ovo označava da dokument nije izmenjen, i ne treba slati sadržaj HTTP poruke, već samo njeno zaglavlje.

Greška
— 400 Loš zahtev — greška u zahtevu
— 401 Neovlašćen — koristiti „Authorization“ radi ovlašćenja
— 402 Neophodna uplata
— 403 Zabranjeno — ovde ni „Authorization“ ne pomaže, pa ne treba ponavljati upit
— 404 Nije nađen
— 405 Metod nije dozvoljen — ovo vam može zatrebati ako npr. ne dozvoljavate neki od zahteva (GET, PUT, POST) za određeni resurs
— 406 Neprihvatljivo — ovaj resurs ne može da ispuni zahteve postavljene kroz „Accept*“ zaglavlja (jezik, format sadržaja)
— 416 Ne može da ispuni zahtevani opseg — ako je klijent tražio deo resursa koji ne postoji (npr. traženi su bajtovi 20000–60000 od resursa /pdfs/tekst.pdf, a čitav resurs zauzima 15kb).


Tekst koji šaljete uz numerički kod nije bitan, i slobodno koristite šta god vam odgovara.
[ tOwk @ 12.07.2003. 16:22 ] @
Citat:
boccio:
(da, znam, ako hocu free, ne moz' da valja...)


Na osnovu čega si ovo zaključio???

Da li misliš da će ti neko ovde naplatiti ako ti nešto kaže, ili misliš da ono što ovde kažemo ne valja?
[ boccio @ 12.07.2003. 17:14 ] @
Citat:
Na osnovu čega si ovo zaključio???

Da li misliš da će ti neko ovde naplatiti ako ti nešto kaže, ili misliš da ono što ovde kažemo ne valja?


uf... da sam znao da ćeš ovako da odreaguješ, ne bi ovo ni napisao...

drugar, ne znam kako si od moje premise došao do tvoje konkluzije, ali ja to zaista nisam mislio...ok? prvo, to je bila šala (fora, doskočica, šega...), tj. aluzija na ono sto m$oftovci pričaju (najvise za linux, gpl i ostalo)...

dalje, hteo sam samo da kažem da mi je želja da vidim sors nečega sličnog gorepomenutom (Vignette StoryServer), i da to NISAM našao na hotscripts.com, gde sam tražio, jet'te iz razloga što tako nešto neće DŽABE da stave tu...samo sam to prokomentarisao na način koji, očigledno, nisu svi shvatili kako treba.

Citat:
...misliš da ono što ovde kažemo ne valja

a ti ga baš pretera...
[ tOwk @ 12.07.2003. 17:48 ] @
Kao prvo, svim dosad u ovoj temi izloženim si ukazivao na to da te zanima kako se vrši obrada URL-ova, a ne da vidiš izvorni kod kompletnog CMS-a. A sada (posle tvoje poslednje poruke), ja ne znam šta te zapravo zanima (ne mogu da „konkludujem“ ništa iz tvojih reči, pored svih „aluzija“ na „premise“ koje ja nisam video).

Što se šala tiče, postoji određeni običaj koji je možda besmislen, a možda i nije (dvotačka-zagrada, i slične gluposti). Ipak, ja i dalje nemam utisak da si se ti po tom pitanju šalio, naročito uz naknadno „obrazloženje“, pa je moja primedba i dalje važeća.
[ boccio @ 12.07.2003. 20:28 ] @
vidi, malo mi je glupo da se thread razvija u ovom smeru. nisam stavio :) ili ;> jer nisam razmisljao da ce neko bez toga da se pogresno istripuje, ok?

Citat:
Ipak, ja i dalje nemam utisak da si se ti po tom pitanju šalio, naročito uz naknadno „obrazloženje“, pa je moja primedba i dalje važeća.


http://www.codeguru.com/forum/...ction=getinfo&userid=47793
ovde sam imao 600+ postova za vc++ (i sire) od kojih bar 90% u vidu pomoci drugima (upravo ovo sto ti cinis meni)...
da sam zaista mislio ovo sto ti tvrdis, bio bik kreten, jel' da? :)

elem, sto se tice mod_rewrite tu nemam da pitam sta, objasnjeno mi je na koji se tu nacin vrsi obrada url-a, treba "samo" da provalim kako ja to da napisem...
a za ovo drugo (CMS), tu me sad interesuje kako se obradjuje url (u stilu 0,3971,23466,00.asp) tako da pitanje i dalje stoji (neki primer, hint, url?)
[ mikis @ 13.07.2003. 05:15 ] @
Citat:
a za ovo drugo (CMS), tu me sad interesuje kako se obradjuje url (u stilu 0,3971,23466,00.asp) tako da pitanje i dalje stoji (neki primer, hint, url?)


Pravac www.vignette.com pa kopaj tamo :) Ja sam davno, pre par godina skinuo neke whitepaper-e o tome kako funkcioniše StoryServer koji je inače izvorno napisan kao CMS za CNET, a kasnije se odvojio kao poseban proizvod i posebna firma. Klikentski deo je radio u browseru i pisan je u Javi, s tim što su jasno odvojene uloge urednika, pisaca teksta i grafičkih/web dizajnera. Back-end je baza podataka koja može biti po izboru (Oracle, Sybase...), a "ispred" web servera se nalazi modul za keširanje koji između ostalog omogućuje da web stranice izgledaju "statički" iako su zapravo dinamički generisane.

Evo iskopao sam taj tekst preko Google-a :) Jes' malo bajat, ali je i dalje aktuelan.

http://builder.cnet.com/webbui...es/Business/HowCnet/index.html

Btw, zadnji put kad sam proveravao, cena Vignette suite-a bila je preko 60K$, a sumnjam da bi trebalo dati još nekoliko puta toliko da bi video sam izvorni kod ;)
[ tOwk @ 13.07.2003. 14:19 ] @
Citat:
boccio:
elem, sto se tice mod_rewrite tu nemam da pitam sta, objasnjeno mi je na koji se tu nacin vrsi obrada url-a, treba "samo" da provalim kako ja to da napisem...

Evo, daću ti niže primer kako da uradiš upravo ono što pomenuti CMS obezbeđuje, i to pomoću mod_rewrite. Zbog toga je i došlo do nesporazuma: mod_rewrite ti omogućava da napraviš i takve stvari, i to dosta jednostavno, pa nema potrebe vezivati se isključivo za taj CMS u ovoj raspravi.

Ukratko, za upotrebu mod_rewrite treba da znaš nekoliko stvari:
— regularne izraze (regular expressions, re)
— način obrade zahteva u Apačiju

Citat:
a za ovo drugo (CMS), tu me sad interesuje kako se obradjuje url (u stilu 0,3971,23466,00.asp) tako da pitanje i dalje stoji (neki primer, hint, url?)


Evo kako sam ovo „testirao“. Napravio sam direktorijum „obrada“ (ekvivalent onom „category2“, naravno, ti prilagodi sebi), i u njega smestio .htaccess i obrada.php. Polja sam nazvao prema Mikisovom objašnjenju gore, pošto ja zaista ne znam šta ona označavaju.

Code:
#.htaccess

Options +FollowSymLinks

DirectoryIndex obrada.php

RewriteEngine On

RewriteBase /obrada

RewriteRule !^obrada\.php.*$   -   [C]
RewriteRule ^([0-9]+),([0-9]+),([0-9]+),([0-9]+)\.asp$      /obrada/obrada.php?cached=$1&template=$2&document=$3&nesto=$4


Ovde su ti najznačajnije ove RewriteRule linije. Prva propušta (ono „[C]“) sve zahteve koji počinju sa „obrada.php“, a druga hvata sve „1,131,4393,292929.asp“ i preusmerava ih na obrada.php.

Ako poznaješ regularne izraze, znaćeš da ([0-9]+) označava bilo koji broj cifara, ali bar jednu cifru. U konkretnom primeru, možda je bolje koristiti npr. ([0-9]{3}) za tačno 3 cifre ili nešto slično, a ti potraži brojnu dokumentaciju na temu regularnih izraza da bi to lepo svario.

Kao primer sam koristio ovakav fajl obrada.php:
Code:
<?php

    foreach (array("cached","template","document","nesto") as $polje) {
        echo "<b>$polje:</b> $HTTP_GET_VARS[$polje]<br>\n";
    }

?>


On će samo ispisati ove primljene promenljive, a kada ti praviš nešto ozbiljnije, tu ćeš obaviti obradu kakva god tebi odgovara, i isporučiti sadržaj na osnovu tih parametara (npr. možda dotični CMS tu proverava da li je dokument keširan, a ako nije preuzima iz baze sadržaj dokumenta sa ID-om $HTTP_GET_VARS[document], i pomoću šablona $HTTP_GET_VARS[template] formira odgovarajući HTML, i to isporučuje klijentu).


Takođe, postoji i druga varijanta, a to je da se svi URL-ovi prebacuju na skriptu obrada.php, koja ih na Apači serveru može pročitati pomoću npr. $PATH_INFO promenljive. Za sve to, pogledaj zaista kvalitetnu dokumentaciju Apačija i PHP-a. Ona je možda konfuzna samo kada ne znaš šta da tražiš, a sada sam ti dao dovoljno nagoveštaja (RE, regular expressions, PATH_INFO).
[ mikis @ 13.07.2003. 15:57 ] @
Evo potrudio sam se da iskopam taj tekst o značenju Vignette URL-ova :)

----------
From: Lucie Melahn
Date: Tue, 24 Oct 2000 18:28:52 -0400
To: "yiru chen"
Subject: Re:[cms-list] Fwd: Dissecting Vignette Storyserver URLs

I don't know about BV, but I did some template development in Vignette.

In Vignette, a page is generated on the fly, but only when the first user
sends a page request to the server.

After that, StoryServer caches a version of the complete HTML page, which
is downloaded when subsequent users request it. This serves to greatly
reduce the load on the server since it has to generate a page on the fly
only once, until the data is updated and the stored HTML page is "flushed".
IN this way, Vignette is optimized for a site that has enormous amounts of
traffic.

The cached pages can be flushed from the server as desired, and are in fact
automatically flushed when a template is altered. when content is altered,
flushing is not automatic. they can be flushed one at a time, or flushes of
entire directories can be scheduled. at large sites, this is typically done
at specific times of the day.

Once a page is flushed from the server, it is generated on the fly next
time someone requests it.

the default URL (called a "cURL" for "custom URL") follows the format
0,XXXX,YYYY,ZZ.html,
for example in this ZDNET story:
http://www.zdnet.com/zdnn/stories/news/0,4586,2644020,00.html

The initial "0" in this cURL means that the page is automatically cached
after the first user requests it. if the first digit is "1", the page is
never cached (you would use this for something like a poll where data is
constantly updated, so you want users to see the latest info).

"4586" represents the ID of the template that builds the page.

"2644020" represents the article ID, since the main building block in
Vignette is "articles".

Finally "00" represents customization capability for particular browsers.
this is not often used, as far as I have seen, and in fact "00" denotes no
browser specification.

( http://cms.filsa.net/archives/cms-list/2000/0649.html )
[ boccio @ 13.07.2003. 20:06 ] @
pogledao sam ove linkove... U pravu si mikis, to je zapravo ono sto ExtremeTech ustvari koristi (sto ne cudi, obzirom da su oni cedo Ziff-Davis-a).

u svakom slucaju to mi izgleda kao (pre)komplikovano resenje za mene. Zapravo Danilo je pogodio pravo u metu sa ovim primerom (obrada.php) "emulacije" njihovog cms-a.

Sad kad kapiram razliku izmedju ta dva nacina procesiranja url-a, lakse mi je da se opredelim za mod_rewrite, obzirom da je vignette-ova poenta (ako se ne varam)upravo u kesiranju strana za servere sa velikim opterecenjem (lepo bi bilo kad bi i moj sajt upao u tu kategoriju :)...

E sad, dolazim do finalnog :) pitanja. Ako se ne varam (bar po onome sto sam citao u forumu 'pretrazivaci'), prednost zapisa url-a u "statickom" maniru, doprinosi i boljem rangiranju na pretrazivacima (iz svih tamopomenutih razloga), tako da cu definitivno morati da ovladam pisanju pravila za mod_rewrite...(danilo, hvala na iscrpnom primeru i objasnjenju).

Pitanje: da li crawling botovi prave razliku izmedju stranica (npr.) www.test.com/clanak/123.htm i www.test.com/0,12,123.htm
odnosno, da li postoje neke sustinske razlike izmedju ova dva "stila" url-ova, iz perspektive rangiranja na, npr. guglu...

thx


[ mikis @ 14.07.2003. 04:08 ] @
Ne bi smelo da bude razlike. Čak više ne važi ni ono staro da crawleri ne vole dinamički generisane strane -- jedino ne bi smeo da prenosiš session id-jeve i slično preko URL-ova -- ali ja ipak preferiram "ulepšavanje" pomoću mod_rewrite, ili na neki drugi način.

Vignette je teška artiljerija, i može biti interesantan samo kao koncept, kako se realizuje ozbiljan CMS. Zato vredi pročitati onaj tekst sa CNET-a koji sam ostavio, kao i whitepapere i brošure sa njihovog sajta.
[ brcha @ 22.08.2003. 13:02 ] @
pa nema nikakve razlike. sa mod_rewrite sve redirektujes u neki php fajl, a u njemu na osnovu parsovanja "putanje" odlucujes sta ces i kako da radis... to je sve.

a crawlerima i jedno i drugo deluje apsolutno isto. a za dinamicke strane (odn. strane koje sadrze "?" ili nesto slicno u urlu, pa se vidi da su dinamicke) nisam siguran kako stoji situacija...