El seu lema es "Quin sistema operatiu utilitzaría Jesus ?"
No us perdeu el logo de "El pez de Jesús" !!!
via Boing Boing
Aquí penso posar les anades de olla que em passin pel cap, no feu gaire cas. Tambe intentare posar les coses que m'agraden per si algu (no crec) té gustos semblants. Agusti 8{>
RewriteEngine On
RewriteLog /xxx/yyy/apache2.0.55/logs/rewrite.log
RewriteLogLevel 1
Això activa el mod_rewrite (a nivell del virtual host que vulguem) i indica on deixar els logs de rewrite, atenció, es convenient baixar el LogLevel a 0 de seguida que pugem perquè genera molta merda.
# /gen///noticias/titol.html --> /lv24h//.html
# $1 es la data (yyyymmdd)
# $2 es el compid
RewriteRule ^/gen/([0-9]+)/([0-9]+)/noticias/.*\.html$ /lv24h/$1/$2.html
Aquest es el meollo del rewrite, com indiquen els comentaris la variable $1 es la data en format yyyymmdd i la variable $2 es el id únic del recurs dins del CMS
També cal notar que per seguretat forço els directoris, tant d'entrada /gen/ com de sortida /lv24h/ així no em poden fer la pirula per intentar accedir a altres directoris.
Explicació caràcter a caràcter:
^ --> indica inici d'string
/gen/ --> directori del que farem rewrite, si la url no conte /gen/ no farem res
([0-9]+) --> Els parentesis son per definir una variable ($1 i $2) i el [0-9] vol dir que acceptem caracters de tipus numeric (del 0 al 9) amb el + fem un tancament de kleene (indica que com a mínim ha d'haver un dígit i que pot haver-hi n) si volem un tancament de kleene opcional (una kleene star, que indica que pot no haver cap dígit o 1 o n) hem de fer servir * en lloc de +
/noticias/ --> un altre cop a pinyon, esperem el directori noticias
.* --> Amb un . sense escapar, estem indicant un caràcter especial de les expressions regulars, es tracta de dir qualsevol caràcter excepte el enter (\n), així doncs, si fem .* estem fent un tancament de kleene sobre qualsevol cosa, per tant "EL QUE SIGUI n-vegades"
\.html --> Esperem a pinyon l'string .html (ATENCIÓ, aquest punt s'ha d'escapar, sinó estaríem dient qualsevol cosa (com hem vist anteriorment))
$ --> Final d'string
La part dreta del rewrite es molt més simple:
/lv24h/ --> A pinyon redireccionem a /lv24h/
$1/$2 --> agafarem el valor de les dues variables que em vist abans data i compid
.html --> A pinyon esperem que el destí es digui .html
Evidentment, el fitxer destí ha d'existir, sinó el rewrite fotrà un pet com un aglà !
Exemples:
http://localhost/gen/20060814/51279679687/noticias/hola-tete-com-estas.html
http://localhost/gen/20060812/51279679687/noticias/ajdfjsdfo.html
http://localhost/gen/20060811/5127967/noticias/ajd-fj-s-dfo.html
Es traduirien per:
http://localhost/lv24h/20060814/51279679687.html
http://localhost/lv24h/20060812/51279679687.html
http://localhost/lv24h/20060811/5127967.html
Noteu que en cap cas afecta el que posem darrera de noticias, però evidentment si es algo amb sentit i que no canvia, molt millor per ser indexats al google
També noteu que es poden fer paranoies del estil, accepto una url amb dos variables i les giro, per confondre a un possible atacant, nomes caldria fer:
RewriteRule ^/gen/([0-9]+)/([0-9]+)/noticias/.*\.html$ /lv24h/$2/$1.html
Per mi no es útil, però es podria fer.
També el mod_rewrite es molt utilitzat per homogeneïtzar les url i fer-les "independents de la plataforma", per exemple si servim contingut dinàmic, avui podem estar fent servir url del estil *.jsp i demà del estil *.php, per homogeneïtzar i fer una especie de "urls lògiques", podem fer servir el mod_rewrite del Apache.
Tanco amb una frase del manual, que il·lustra molt bé la complexitat del mod_rewrite:
Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. -- Brian Moore bem@news.cmc.netMés informació: Manual mod_rewrite Tutorial molt explicatiu mod_rewrite cheat sheet Optimizing your MovableType blog for Google
-- Creation, recreation of a DAD, launch from the user ngastos (the user must have the XDBADMIN role)
begin
begin
dbms_epg.drop_dad('ngastos');
dbms_output.put_line('ngastos dropped');
commit;
exception when others then
dbms_output.put_line('Error: '||sqlerrm);
end;
dbms_epg.create_dad('ngastos', '/ngastos/*');
dbms_epg.set_dad_attribute('ngastos', 'database-username', 'NGASTOS');
dbms_epg.authorize_dad('ngastos');
commit;
end;
-- Show all the attributes in a DAD
declare
-- Local variables here
i integer;
l_attr_name VARCHAR2(30);
l_attr_value VARCHAR2(30);
PROCEDURE my_get_dad_attribute (p_dad_name IN VARCHAR2,
p_attr_name IN VARCHAR2) AS
l_attr_value VARCHAR2(3000);
BEGIN
l_attr_value := DBMS_EPG.get_dad_attribute (
dad_name => p_dad_name,
attr_name => p_attr_name);
DBMS_OUTPUT.put_line(p_attr_name || '=' || l_attr_value);
END;
BEGIN
DBMS_OUTPUT.put_line('Attributes');
DBMS_OUTPUT.put_line('=========');
my_get_dad_attribute('ngastos', 'after-procedure');
my_get_dad_attribute('ngastos', 'always-describe-procedure');
my_get_dad_attribute('ngastos', 'authentication-mode');
my_get_dad_attribute('ngastos', 'before-procedure');
my_get_dad_attribute('ngastos', 'bind-bucket-lengths');
my_get_dad_attribute('ngastos', 'bind-bucket-widths');
my_get_dad_attribute('ngastos', 'cgi-environment-list');
my_get_dad_attribute('ngastos', 'compatibility-mode');
my_get_dad_attribute('ngastos', 'database-username');
my_get_dad_attribute('ngastos', 'default-page');
my_get_dad_attribute('ngastos', 'document-path');
my_get_dad_attribute('ngastos', 'document-procedure');
my_get_dad_attribute('ngastos', 'document-table-name');
my_get_dad_attribute('ngastos', 'error-style');
my_get_dad_attribute('ngastos', 'exclusion-list');
my_get_dad_attribute('ngastos', 'fetch-buffer-size');
my_get_dad_attribute('ngastos', 'input-filter-enable');
my_get_dad_attribute('ngastos', 'info-logging');
my_get_dad_attribute('ngastos', 'owa-debug-enable');
my_get_dad_attribute('ngastos', 'max-requests-per-session');
my_get_dad_attribute('ngastos', 'nls-language');
my_get_dad_attribute('ngastos', 'path-alias');
my_get_dad_attribute('ngastos', 'path-alias-procedure');
my_get_dad_attribute('ngastos', 'request-validation-function');
my_get_dad_attribute('ngastos', 'session-cookie-name');
my_get_dad_attribute('ngastos', 'session-state-management');
my_get_dad_attribute('ngastos', 'transfer-mode');
my_get_dad_attribute('ngastos', 'upload-as-long-raw');
end;