PDA

Visualizza la versione completa : problema con mod_rewrite


lucaberlin
25-10-2008, 16:55
ciao a tutti
sto provando a usare per la prima volta mod_rewrite
voglio passare da una pagina tipo

www.miodominio.it/pagina.php=12

a una

www.miodominio.it/page-12/titolo_della_pagina.html

nel mio file htaccess ho scritto

RewriteEngine On
RewriteRule ^page-([^/]+)/([^/]+)\.html pagina.php?id=$1 [L]

funziona, ma con un problema: la pagina corretta viene aperta ma non viene riconosciuto il foglio di stile

se provo una struttura del tipo

www.miodominio.it/page-12-titolo_della_pagina.html

cio senza / funziona tutto senza problemi. per tutti i siti usano / per separare variabili e/o testo nella url (quindi sar meglio?)

ho pensato che probabilmente non avrei problemi usando i link assoluti per definire il foglio di stile, ma vorrei evitare in quanto potrei dover spostare in futuro il sito. pensandoci non vorrei che lo stesso problemi mi si ripresenti poi nei link interni delle pagine che voglio ottimizzare.

idee?

grazie a tutti
ciao
Luca

-UttE-
25-10-2008, 22:53
E' normale... le url relative interne (compresa quella del foglio di stile) mica sanno che hai usato il rewrite... cercano dalla dir in cui si trovano.

Se non vuoi mettere il nome del dominio, perch pensi di spostarlo, puoi comunque premettere uno / (ad esempio "/style.css")... a lato client funziona come un url assoluto.

semolino
18-11-2008, 15:18
Accade anche a me.

Ho realizzato da questo link

Giovanni Musica (lab.php?sort=1&arch=1)
questo

Giovanni Musica (lab/1/1.html)

l'.httpconf nella folder principale, cosi come la pagina lab.php ed cosi

RewriteEngine On
RewriteRule ^lab/([^/]+)/([^/]+).html lab.php?sort=$1&arch=$2 [L]

quando testo il link non mi prende il foglio di stile e le immagini.
Provando quanto scritto, avendo il mio .css in root/css/style.css
devo inserire in lab.php
../../css/style.css
e non
/css/style.css
in quanto non mi funziona (sono in locale).

Una cosa strana , invece, che dopo aver apert la pagina, il link da

Giovanni Musica (lab/1/1.html)
diventa

Giovanni Musica (lab/1/lab/1/1.html)
ovvero duplica la prima parte di percorso, come mai? :master:

-UttE-
18-11-2008, 21:20
In locale alcune cose possono cambiare, visto che non hai un dominio... quel percorso del css va provato sull'host.

Il percorso te lo duplica perch la regola diventa ricorsiva se usi le stesse iniziali (lab sia per la pagina originale che per quella riscritta)... per quella riscritta inventati qualche altro nome.

semolino
18-11-2008, 23:43
Originariamente inviato da -UttE-
In locale alcune cose possono cambiare, visto che non hai un dominio... quel percorso del css va provato sull'host.

In questo modo non riesco a testarlo in locale

Originariamente inviato da -UttE-
Il percorso te lo duplica perch la regola diventa ricorsiva se usi le stesse iniziali (lab sia per la pagina originale che per quella riscritta)... per quella riscritta inventati qualche altro nome.
In che modo? Se cambio il link riscritto devo metterlo uguale anche nell'httpconf, giusto?
Ho provato a scrivere lab-mga/1/2.html utilizzando lab.php?...
ma il problema resta.
Non vorrei proprio che sia per il fatto dei percorsi.

Il fatto che se in locale utilizzo / prima del link, mi va in localhost e non nella cartella del sito. :master:

grazie

-UttE-
19-11-2008, 00:33
Appunto, ti va in localhost... ma sul dominio il percorso css funziona.
Non ti conviene mettere il percorso relativo ../../ perch poi su pagine che hai riscritto con diversa struttura non va.

Quanto alla regola, la pagina riscritta deve chiamarsi ad esempio qualcosa/1/2.html o anche /1/2.html omettendo il qualcosa... se la fai riniziare con lab diventa ricorsiva, per il modo in cui strutturata.

EDIT: ti consiglio di concentrarti sul resto per ora e approfondire con calma il rewrite facendo prima numerosi test in locale... la riscrittura degli url meno volte si fa meglio (perch google non la prende bene a vedere sempre url diversi per le stesse pagine), quindi ti conviene affrontarla al meglio quando ne sei padrone.

semolino
19-11-2008, 01:33
Ho impostato il localhost che punta direttamente alla mia cartella cosi anche in locale testo le pagine come online potendo mettere / davanti ai link.
Ora non ho problemi e ho scritto 8 regole di rewrite, per il mio menu e i link interni ai contenuti.
se on line non fa scherzi, sposto tutto cosi com'.

Ma prima di far indicizzare le pagine metto un po di contenuti.

Ora non so bene come costruire un sitemap, dato che molti link sono dinamici; ma sopratutto gli url statici, all'interno del sitemap, li inserisco cosi
pagina/1/prova.html
o cosi
pagina.php?id=1&c=prova
?

PS. queso quanto mi basta per le mie pagine
RewriteEngine On
RewriteRule ^lab/([^/]+)/([^/]+).html lab.php?sort=$1&arch=$2 [L]
RewriteRule ^progetti/([^/]+).html progetti.php?id_catimg=$1 [L]
RewriteRule ^mostra-progetti/([^/]+)/([^/]+)/([^/]+).html progetti.php?id_catimg=$1&id_prj=$2&show=$3 [L]
RewriteRule ^cantiere/([^/]+)/([^/]+)/([^/]+)/([^/]+).html cantiere.php?blog=$1&id_cant=$2&cod=$3&id_img=$4 [L]
RewriteRule ^cantiere-post-mgalab/([^/]+)/([^/]+)/([^/]+).html cantiere.php?id_cant=$1&cod=$2&id_img=$3 [L]
RewriteRule ^cantiere-tutti/([^/]+).html cantiere.php?sort=$1 [L]
RewriteRule ^news/([^/]+)/([^/]+).html news.php?step=$1&n_pbl=$2 [L]
RewriteRule ^news-mgalab/([^/]+)/([^/]+)/([^/]+).html news.php?step=$1&n_pbl=$2&id_pbl=$3 [L]
RewriteRule ^boxes/guarda/([^/]+)/([^/]+)/([^/]+)/([^/]+).html /boxes/guarda.php?osserva=$1&n_pbl=$2&id_rif=$3&imm=$4 [L]

-UttE-
19-11-2008, 06:46
La sitemap, cos come i link interni al sito, devono usare gli url riscritti... per un esterno gli url dinamici non devono pi esistere.

Se ti funziona tutto bene... ma ti consigliavo di prenderti tempo per studiare il tutto con pi eleganza... ad esempio hai pensato che con un (.*) puoi immettere una qualsiasi stringa nelle url (ad esempio ripetere il title della pagina, opportunamente pulito dai caratteri speciali)?

semolino
19-11-2008, 11:14
Sicuramente terr tutte queste cose in considerazione per un'altra occasione, ora qualcosa pi ho capito. Non davo importanza a come chiamare le pagine o i link.

Ma per l'(.*) mi dici che si pu mettere stringhe a piacere. Una cosa ho notato, dimmi se sbaglio, quando riscrivo un link ad esempio riporto:
/colori/1/5.html
nel .httpaccess
^colori/ qui i parametri

non posso mettere nell'httpaccess
^colori2/ qui i parametri.

Se mi dici che si pu stampare un title, dovrebbe essere anche nell'url riscritto, altrimenti il link non coincide.

Ora mi cerco qualcosa in merito.
Grazie

-UttE-
19-11-2008, 17:25
Si che puoi mettere colori/ e colori2/ ... il problema se usi attaccate espressioni simboliche tipo colori/ e colori(.*)/

Puoi fare ad esempio un link colori-il_mio_title/1/2.html indicandolo come colori-(*.)/([^/]*)/([^/]*)\.html

Poi ovviamente nei link interni e delle sitemap devi essere coerente e indicare per ogni pagina un'unica stringa.

Loading