[SOLVED] Url rewriting

La discussione sul CMS Made Simple in italiano.

Moderator: magallo

Post Reply
nervino
Power Poster
Power Poster
Posts: 448
Joined: Sun Dec 28, 2008 12:15 pm
Location: Roma, Italy

[SOLVED] Url rewriting

Post by nervino »

Ciao, sto provando a scrivere delle regole nell'.htaccess per riscrivere le URL di un modulo.

È la prima volta che ci provo; ho seguito un po' di guide trovate in rete ma non mi funziona.

Premetto che il mod_rewrite è abilitato e funzionante. Per il CMSMS e gli altri moduli ovviamente...

Per una delle stringhe che dovrei riscrivere, ho scritto questa espressione di prova nell'.htaccess:
RewriteRule ^([0-9]*)/([^/]+)/([0-9]*)/([0-9]*)/([^/]+)/([0-9]*).htm$
 
index.php?mact=NomeModulo,cntnt01,pagina_modulo,0&cntnt01Primo_Parametro=$1&cntnt01Secondo_Parametro=$2&cntnt01Terzo_Parametro=$3&cntnt01Quarto_Parametro=&4&cntnt01Quinto_Parametro=&5&cntnt01returnid=&6 [NC,L]
Risultato: l'URL che vorrei riscrivere non cambia di una virgola.


Qualcuno è esperto di espressioni regolari e può dirmi cosa c'è che non va in quella che ho scritto?

grazie
Last edited by nervino on Sat Jul 24, 2010 12:33 pm, edited 1 time in total.
alby

Re: Url rewriting

Post by alby »

Il corretto uso non è nel url rewriting di mod_rewrite ma interno al modulo (generato automaticamente).
Tieni solo presente che se hai un altro form ecco che non hai più cntnt01 ma cntnt02, .....

Alby
nervino
Power Poster
Power Poster
Posts: 448
Joined: Sun Dec 28, 2008 12:15 pm
Location: Roma, Italy

Re: Url rewriting

Post by nervino »

Stavo prendendo spunto dal modulo News, tanto per cambiare.

Ho visto che vengono registrati dei parametri con RegisterRoute..È questo che intendi per "generato automaticamente"?

Mi puoi suggerire un modulo/post/guida ecc. da studiare per imparare?

grazie
alby

Re: Url rewriting

Post by alby »

nervino wrote: Mi puoi suggerire un modulo/post/guida ecc. da studiare per imparare?
Il modulo News va benissimo per questo

Alby
nervino
Power Poster
Power Poster
Posts: 448
Joined: Sun Dec 28, 2008 12:15 pm
Location: Roma, Italy

Re: Url rewriting

Post by nervino »

Da quello che ho capito:

1) con CMSMS si può fare a meno delle espressioni regolari nell'htaccess

2) Ogni URL che si vuole riscrivere deve essere registrata con RegisterRoute()

3) I link creati con CreateLink() devono essere modificati

Sempre copiando "News", ho fatto una prova con un link che passa un ID alla pagina di dettaglio.
L'Url viene riscritta, ma si viene reindirizzati nella Home page.

Ecco quello che ho fatto:

Nel file principale del modulo (NomeModulo.module.php):
$this->RegisterRoute('/[mM]odulo\/(?P[0-9]+)$/');

Nel file action.default.php:
$aliased_title = munge_string_to_url($row['Titolo']);
$prettyurl = 'Modulo/'.$row['IDOpera'];
$onerow->titolo = $this->CreateLink($id, 'dettaglio_opera', $returnid, $row['Titolo'], '', '', false, false, '', true, $prettyurl);
Seguendo il link (http://www.sitoprova.vmware/Modulo/220.htm) vengo sbattuto in home page. (Vi risparmio le numerose altre modifiche e relativi fallimenti).

Aggiungo che con il seguente codice la pagina di dettaglio viene visualizzata correttamente (senza pretty url, ovviamente):
$onerow->titolo = $this->CreateLink($id, 'dettaglio_opera', $returnid, $row['Titolo'], array('IDOpera'=>$row['IDOpera']));
Qualche suggerimento?
Cosa sbaglio?

grazie
Last edited by nervino on Thu Jul 15, 2010 11:23 am, edited 1 time in total.
alby

Re: Url rewriting

Post by alby »

3 consigli:

1. usa sempre il returnid finale:

Code: Select all

$this->RegisterRoute('/[mM]odulo\/(?P<IDOpera>[0-9]+)\/(?P<returnid>[0-9]+)$/');
2. in prettyurl aggiungere:
- il returnid finale
- aggiungere davanti il path corrente (la tua pagina è la root)?

3. in $this->CreateLink devi aggiungere quale "action" e tutti i parametri:
  $params['action'] = $action;
  $params['IDOpera'] = $row['IDOpera'];
  $onerow->titolo = $this->CreateLink($id, 'dettaglio_opera', $returnid, $row['Titolo'], $params, '', false, false, '', true, $prettyurl);

Adesso dovrebbe funzionare (controlla il link passando con il mouse sopra)

Alby
nervino
Power Poster
Power Poster
Posts: 448
Joined: Sun Dec 28, 2008 12:15 pm
Location: Roma, Italy

Re: Url rewriting

Post by nervino »

Grazie Alby.
Ritorno sul lavoro solo ora, causa figlio piccolo  :) ..

In questo modo funziona il rewriting ma seguendo il link viene solo ricaricata la pagina (forse riguarda il path, come hai suggerito..).

Ho comunque fatto ancora delle prove e scoperto che, contrariamente a quanto pensavo, le variabili necessarie devono comparire tutte nell'url "riscritta" (che tonno, pensavo che bastasse passarle e mostrarne solo alcune nell'url...).

Ho fatto così, e funziona:
A proposito, quando parli di returnid finale significa che bisogna metterlo alla fine dell'url? (e, in caso, perché?)

In Modulo.module.php
$this->RegisterRoute('/[mM]odulo\/(?P[0-9-]+)_(?P[0-9-]+)_(?P[0-9-]+)_(?P[A-Za-z0-9-]+)\/(?P[a-z]+)\/(?P[A-Za-z0-9-]+)\/(?P[A-Za-z0-9-]+)$/',array('action'=>'dettaglio_opera'));

In action.default.php
if (!empty($filter_localita) ? $filter_localita_pretty = '_'.$filter_localita : $filter_localita_pretty ='');
if (!empty($filter_tipologia) ? $filter_tipologia_pretty = '_'.$filter_tipologia : $filter_tipologia_pretty ='');
if (!empty($ordina_per) ? $ordina_per_pretty = '/'.$ordina_per : $ordina_per_pretty ='');
if (!empty($filter_periodo) ? $filter_periodo_pretty = '/'.$filter_periodo : $filter_periodo_pretty ='');
if (!empty($aliased_title) ? $aliased_title_pretty = '/'.$aliased_title : $aliased_title_pretty ='');


$prettyurl = 'Modulo/'.$row['IDOpera'].'_'.$returnid.$filter_localita_pretty.$filter_tipologia_pretty
.$ordina_per_pretty.$filter_periodo_pretty.$aliased_title_pretty;

$onerow->titolo = $this->CreateLink($id, 'dettaglio_opera', $returnid, $row['Titolo'], '', '', false, false, '', true, $prettyurl);
 

Ho accorpato gli id numerici per isolarli dal resto dell'url, visto che non hanno molto senso.
Last edited by nervino on Sat Jul 24, 2010 12:35 pm, edited 1 time in total.
alby

Re: [SOLVED] Url rewriting

Post by alby »

nervino wrote: le variabili necessarie devono comparire tutte nell'url "riscritta"
Se no come fai ad averle nella pagina di arrivo? (dovresti usare dei SESSION se no)

nervino wrote: A proposito, quando parli di returnid finale significa che bisogna metterlo alla fine dell'url?
No, basta averlo solo come variabile

Alby
Post Reply

Return to “Italian - Italiano”