potete chiudere questo topic, il quesito è stato risolto
scusate ancora.
potete chiudere questo topic, il quesito è stato risolto
scusate ancora.
credo di aver risolto la maggior parte dei miei problemi.
erano dovuti tutti a una questione di link.
adattandoli e utilizzando una variabile come percorso assoluto sembra che tutto funzioni. ( sgrrraaaat )
grazie!
Ho provato a seguire i tuoi consigli, sperimentandolo su una pagina specifica.
la pagina
mostra_categoria.php?alias_sezione=$alias_sezione&id_sezione=$id_sezione
è diventata
alias_sezione/categoria_id_sezione
tramite questa regola nel file htaccess
RewriteEngine On
RewriteRule ^([^/]+)/categoria_([^/]+)$ mostra_categoria.php?alias_sezione=$1&id_sezione=$2
All'interno di questa pagina ci sono:
comandi php include >> funzionano
link ad altre categorie ( che passano ai link i valori alias2 e id_sezione2 per mostrare la relativa pagina)
E' il punto 2 a darmi problemi.
il link riscritto dovrebbe essere
nome_dominio/alias_sezione2/id_sezione2
invece la stringa me lo passa come
nome_dominio/alias_sezione/alias_sezione2/categoria_id_sezione2
in pratica la riscrittura crea una sottodirectory.
Potrebbe funzionare se impostassi i link che richiamano la sezione 2 in questo modo
../alias_sezione2/categoria_id_sezione2 ?
Grazie!
I caratteri speciali non ci devono essere. Possono succedere varie porcate tipo conversione in entità HTML o %hex.
Io mi son fatto una mia funzione (che mi tengo ben stretto.. ma se ne trovano in vari script: wordpress, ...) che funziona così:
f("ABcdì") = abcdi
Considera che quando ti prendi un URL tipo pagina.php?id=$1&titolo=$2, $2 (abcdi) lo butti via perchè non puoi tornare indietro (a ABcdì). Per caricare i dati, devi basarti sulla chiave primaria ($1)
(questo era per rispondere a come rilavorare la stringa dopo averla presa: non va proprio presa)
Grazie.
Proprio oggi ho cambiato un pò di script, impostando le query e i passaggi via get utilizzando solo il parametro id.
Per quanto riguarda la funzione, pensavo di utilizzare questa qui:
**function puliscistringa($stringa)
{
$stringa = str_replace("à", "a", $stringa);
$stringa = str_replace("è", "e", $stringa);
$stringa = str_replace("à", "a", $stringa);
$stringa = str_replace("ì", "i", $stringa);
$stringa = str_replace("ù", "u", $stringa);
$stringa = ereg_replace("[^A-Za-z0-9 ]", "", $stringa );
return $stringa;
}
**
I link non funzionavano, cioè? 404? Che errore hai?
Il redirect 301 serve per fare appunto.. un redirect da una pagina che non esiste più (esempio: pagina.php?$1,$2) verso la nuova ($1/$2.html)
Si mi dava il 404, ma probabilmente era un'impostazione errata dei miei link.
L'errore veniva generato nei link che facevano parte del menu top ( un menu sempre presente in tutte le pagine, configurato basandomi su una variabile di tipo $percorso_assoluto, configurata nel file config.php.)
Un altro problema da considerare è che in una pagina ho anche un iframe ( sono stato costretto ).
Insomma, un bel macello, soprattutto per chi, come me, è pochissimo tempo che ha scoperto l'uso del file htaccess e vorrebbe adattarlo a un cms realizzato in casa.
comunque grazie, continuerò a romperti le scatole
Intanto ti ringrazio per la risposta.
La questione fondamentale è che non sono pratico di espressioni regolari e di htaccess.
Ho letto in giro per la rete e ho provato a configurare un htaccess da solo, "raccapezzando" pezzi .
Dovrei ripulire tramite una funzione php che ripulisce le stringhe dai caratteri speciali, tipo questa ```
ereg_replace("[^A-Za-z0-9 ]
Fondamentalmente il problema è questo:
il sito che sto progettando è strutturato in contenuti associati a sottocategorie. Queste ultime sono a loro volta organizzate in categorie e in, livello "madre", sezioni.
Le pagine in php create sono:
mostra_sezione.php >> mostra l'elenco delle sezioni di secondo livello associate a quella "Madre", passando per get l'alias della sezione e il suo id
mostra_categoria >> mostra le sezioni di secondo terzo livello, passando gli stessi parametri di cui sopra
mostra_lista_contenuti.php >> mostra i contenuti associati a una sezione di terzo livello, passando anche questa gli stessi parametri.
contenuto.php >> riceve via get l'id del contenuto
il sito è realizzato in cinque lingue, ognuna delle quali risiede in una cartella, generando, quindi un url del tipo
dominio.it/LINGUA/SEZIONE_MADRE/SECONDO_LIVELLO/TERZO_LIVELLO/titolo_contenuto
mostra_sezione.php >> dominio.it/LINGUA/SEZIONE_MADRE
mostra_categoria.php >> dominio.it/LINGUA/SEZIONE_MADRE/SEZIONE_SECONDO_LIVELLO
mostra_lista_contenuti >> dominio.it/LINGUA/SEZIONE_MADRE/SEZIONE_SECONDO_LIVELLO/TERZO_LIVELLO
I miei dubbi riguardano:
1) il fatto dei caratteri speciali nel campo alias sezione
2) se mettere un htaccess in ogni cartella delle 5 lingue o uno solo nella root principale
3) come gestire i link, dato che feci una prova in questa direzione ma i link non funzionavano; credo che sia necessario qualche redirect 303, ma non so come fare.
Ti ringrazio nuovamente
Salve a tutti,
prima di sottoporre il problema in titolo, premetto che ho fatto una ricerca all'interno di questo forum ma non ho trovato elementi utili alla soluzione.
Ho un file .htaccess che contiene la seguente regola di riscrittura
Codice:
RewriteRule ^([^/]+)_([^/]+).html$ mostra_sezione.php?nome_sezione=$1&id_sezione=$2
In sostanza, dovrebbe uscire ( e funziona ) un url del tipo nome_sezione_id_sezione.html .
Sorgono dei problemi quando all'interno della variabile nome_sezione compare un ?.
Ad esempio, se la sezione si chiama "nome sezione?" , la regola sopra inserita non funziona, dato che il carattere ? non è interpretato, per l'appunto, come carattere testuale ma come carattere speciale; di conseguenza l'indirizzo si ferma all'elemento della stringa che lo precede.
Sicuramente bisognerà utilizzare l'escape ? ; così ho letto da diverse parti.
Quello che non riesco a capire, però, è dove inserirlo all'interno della regola di riscrittura.
Chiedo scusa per la prolissità, ma ho cercato di illustrare nel modo più esaustivo possibile il problema, cercando di rispettare quando indicato nel regolamento del forum.
Grazie a tutti per la disponib
Salve a tutti,
prima di sottoporre il problema in titolo, premetto che ho fatto una ricerca all'interno di questo forum ma non ho trovato elementi utili alla soluzione.
Ho un file .htaccess che contiene la seguente regola di riscrittura
RewriteRule ^([^/]+)_([^/]+).html$ mostra_sezione.php?nome_sezione=$1&id_sezione=$2
```In sostanza, dovrebbe uscire ( e funziona ) un url del tipo nome_sezione_id_sezione.html .
Sorgono dei problemi quando all'interno della variabile nome_sezione compare un ?.
Ad esempio, se la sezione si chiama "nome sezione?" , la regola sopra inserita non funziona, dato che il carattere ? non è interpretato, per l'appunto, come carattere testuale ma come carattere speciale; di conseguenza l'indirizzo si ferma all'elemento della stringa che lo precede.
Sicuramente bisognerà utilizzare l'escape \? ; così ho letto da diverse parti.
Quello che non riesco a capire, però, è dove inserirlo all'interno della regola di riscrittura.
Chiedo scusa per la prolissità, ma ho cercato di illustrare nel modo più esaustivo possibile il problema, cercando di rispettare quando indicato nel regolamento del forum.
Grazie a tutti per la disponibilità
PS:chiedo scusa, ho inserito la discussione nel forum sbagliato. Chiedo venia