.htaccess su Tophost

Ciao JthaX,
visto che vedo che ci stai provando ma senza risultato ti do una mano...

Penso sempre le cose si imparano sbagliando ed e perciò che ti ho lasciato fare :)

-------------------------------------

Da quello che ho capito tu vuoi nascondere varie informazioni inviate in $_GET dalla tua piattaforma.

// Prima di cominciare dobbiamo dire al motore che deve seguire le nostre regole.
Codice:
 RewriteEngine On

// Possiamo passare adesso all'inserimento delle varie informazioni che lui deve seguire quando vengono inviate delle richieste.

Codice:
RewriteRule quale-sia-la-richiesta    come-la-deve-interpretare

Un'esempio pratico,
Se abbiamo -> sito.it/news.php?id=1 e vogliamo nascondere il get e trasformare la richiesta come una pagina html :

Codice:
RewriteRule ^news-([0-9]+)\.html$ news.php?id=$1

Adesso ti spiego come funziona :

1. "^" comunica all'interprete l'inizio della stringa/regola
2. "news" e il nome della pagina seguito da un trattino + l'id della news passata in $_GET
3. "$" avvisiamo che la stringa finisce con .html
4. "$1" fa riferimento al parametro inviato in questo cado il campo id in $_GET.

Poi ci sono altre impostazioni che puoi implementare ma il mio consiglio e quello di imparare una cosa alla volta. In questo caso riesci a passare solo un valore se per caso devi passare due valori come per esempio :

news.php?cat=mondo&id=1

Allora il discorso e diverso bisogna interpretarlo in questa maniera :

Codice:
RewriteRule ^([a-z]+)/news-([0-9]+)\.html$ news.php?cat=$1&id=$2
 
Ciao MMD,

grazie anche a te del sostegno, in effetti è da un po' che ci sto sbattendo il muso. Anche se ancora regna un bel caos.
Come appunto dicevo, qualcosa la capisco di come si imposta la regola etc.
E infatti sono partito da quella certezza sopra citata. Ora devo andare avanti ma non capisco perché non le piglia.
E poi, una volta fatti gli innesti, diciamo, col file .htaccess, devo rimettere mano al codice per riscriverli in modo tradizionale?
 
Per sfizio ho provato il codice che mi hai girato tu.
Non funzia.

Resta quello postato da me 2-3 interventi fa...
Ora devo capire come fare per gli articoli del blog.
 
Molto strana come cosa perchè apache dovrebbe seguire le regole applicate dal file. Puoi postare il codice che usi attualmente ?

Sicuro. Eccolo qui:
Codice:
RewriteEngine On
RewriteBase /htdocs/
RewriteRule ^([^/]*)\.html$ /index.php?modulo=$1 [L]

ErrorDocument 400 http://www.miosito.it/index.php?modulo=errore
ErrorDocument 401 http://www.miosito.it/index.php?modulo=errore
ErrorDocument 403 http://www.miosito.it/index.php?modulo=errore
ErrorDocument 404 http://www.miosito.it/index.php?modulo=errore
 
Codice:
RewriteEngine On
[B]RewriteBase /htdocs/[/B]
RewriteRule ^([^/]*)\.html$ /index.php?modulo=$1 [L]

ErrorDocument 400 http://www.miosito.it/index.php?modulo=errore
ErrorDocument 401 http://www.miosito.it/index.php?modulo=errore
ErrorDocument 403 http://www.miosito.it/index.php?modulo=errore
ErrorDocument 404 http://www.miosito.it/index.php?modulo=errore

Dovrebbe essere :

RewriteBase /htdocs
oppure
RewriteBase /

Poi dovresti pastarmi anche un'esempio di url dove ci sono le varie variabili passate in get per capire com'è l'url
 
Codice:
RewriteEngine On
[B]RewriteBase /htdocs/[/B]
RewriteRule ^([^/]*)\.html$ /index.php?modulo=$1 [L]

ErrorDocument 400 http://www.miosito.it/index.php?modulo=errore
ErrorDocument 401 http://www.miosito.it/index.php?modulo=errore
ErrorDocument 403 http://www.miosito.it/index.php?modulo=errore
ErrorDocument 404 http://www.miosito.it/index.php?modulo=errore

Dovrebbe essere :
RewriteBase /htdocs

Quella è una specifica di Tophost. Così deve essere e così l'ho incollata dalle FAQ per non avere seccature.
Allora la trasformazione deve essere questa.

Attuale/ dinamico:
miosito.it/index.php?modulo=servizi [esempio]
miosito.it/index.php?modulo=blog&id_post=1&titolo=Titolo-del-post
miosito.it/index.php?modulo=portfolio&tab=vetrina

Devono diventare così:
http://www.miosito.it/servizi.html
http://www.miosito.it/portfolio/vetrina.html
http://www.miosito.it/Titolo-del-post-del-blog.html

Ecco, questa è la trasformazione che voglio operare.
Con il codice attuale funziona solo per il primo esempio fatto.
 
Non lo prende.

Vero, rileggendo la regola mi sono accorto che l'ho scritta male.
Prova così:
Codice:
RewriteRule ^([^/]+)/([^/]+)/([^\.]+)\.html$ /index.php?modulo=$1&id_post=$2&titolo=$3 [L]

Per permetterti di aprire una url tipo:
Codice:
http://www.miosito.it/blog/5/Titolo-del-post.html

Che dovrebbe corrispondere a questa:
Codice:
http://www.miosito.it/index.php?modulo=blog&id_post=5&titolo=Titolo-del-post


Piccola info di teoria: se la tua url dinamica richiede 3 parametri (es: index.php?modulo=blog&id_post=5&titolo=Titolo-del-post) allora questi parametri dovranno essere presenti anche nella url statica, è per questo che la url risultante è simile a quella che ti ho scritto qui.
 
Vero, rileggendo la regola mi sono accorto che l'ho scritta male.
Prova così:
Codice:
RewriteRule ^([^/]+)/([^/]+)/([^\.]+)\.html$ /index.php?modulo=$1&id_post=$2&titolo=$3 [L]
Per permetterti di aprire una url tipo:
Codice:
http://www.miosito.it/blog/5/Titolo-del-post.html
Che dovrebbe corrispondere a questa:
Codice:
http://www.miosito.it/index.php?modulo=blog&id_post=5&titolo=Titolo-del-post


Piccola info di teoria: se la tua url dinamica richiede 3 parametri (es: index.php?modulo=blog&id_post=5&titolo=Titolo-del-post) allora questi parametri dovranno essere presenti anche nella url statica, è per questo che la url risultante è simile a quella che ti ho scritto qui.

Nuooo, che schifo :( Orribile così.
Quindi devo rimettere mano al codice mio in quel caso, no?
Comunque inserendo la regola che mi dai tu arriva alla pagina in questione ma praticamente va in vacca (termine molto tecnico, lo so) tutta la formattazione coi CSS e francamente trovo la cosa grottesca.

Sta cosa del mod_rewrite mi sta facendo diventare i capelli bianchi.
 
Significa che la regola ha funzionato bene, quanto ai css se non specifichi il percorso relativo dalla root, punteranno sicuramente su http://www.miosito.it/blog/5/style.css che ovviamente non esiste.

Per intenderci, invece di:
HTML:
<link href="style.css" ...

Dovresti dirgli:
HTML:
<link href="/path-to-css/style.css" ...


Se vuoi eliminare l'id numerico dalla tua url devi eliminarlo dallo script e devi usare come chiave univoca del post il suo titolo, in questo modo gli unici parametri che ti occorrono diventano blog e titolo del post e potrai quindi realizzare una url più pulita.
 
Ahn, d'accordo, quindi, anche in proiezione futura, sempre meglio specificare tutta la trafila del link senza arrivare subito al sodo, in modo che se poi devo (far) riscrivere qualcosa con htaccess non inciampo in questi disguidi. Giusto?

Ora posso procedere allora con l'inserimento delle altre regole, in sintesi:
---

Pagine, diciamo, semplici:
Codice:
RewriteRule ^([^\.]+)\.html$ /index.php?modulo=$1 [L]
...per passare da miosito.it/index.php?modulo=quello-che-e ---> miosito.it/quello-che-e.html ...e pare funzioni.

Cosa devo accodare a questa regola? Queste qui di seguito, no?

Pagine del portfolio:
Codice:
RewriteRule ^([^/]+)/([^/]+)/([^\.]+)\.html$ /index.php?modulo=$1&tab=$2&limit=$3 [L]
...per passare da miosito.it/index.php?modulo=porfolio&tab=wordpress&limit=4 ---> miosito.it/porfolio/wordpress/4.html

Pagine, diciamo, derivate dal blog:
Codice:
RewriteRule ^([^/]+)/([^/]+)/([^\.]+)\.html$ /index.php?modulo=$1&id_post=$2&titolo=$3 [L]
...per passare da miosito.it/index.php?modulo=blog&id_post=5&titolo=Titolo-del-post ---> miosito.it/blog/5/Titolo-del-post.html

Una di seguito all'altra.
Sbaglio qualcosa?
 
Ho testato questi e, formazzazione sballata a parte, funzionano.
Altre correzioni da fare secondo voi?

(è commentato perché devo fare altre limature al sito in generale)

Codice:
RewriteEngine On
RewriteBase /htdocs/

# Moduli standard
#RewriteRule ^([^/]*)\.html$ /index.php?modulo=$1 [L]

# Derivati del Portfolio
#RewriteRule ^portfolio/([^/]*)\.html$ /index.php?modulo=portfolio&tab=vetrina [L]
#RewriteRule ^portfolio/([^/]*)/([^/]*)\.html$ /index.php?modulo=portfolio&tab=$1&limit=$2 [L]

# Derivati dal Blog
#RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.html$ /index.php?modulo=$1&id_post=$2&titolo=$3 [L]
#RewriteRule ^blog/([^/]*)\.html$ /index.php?modulo=blog&action=$1 [L]
 
L'unica cosa che mi premeva di suggerirti l'hai recepita d'intuito, bravo.
Mi riferisco all'utilizzo delle parametriche fisse nella regex, tipo:
Codice:
RewriteRule ^blog/([^/]*)\.html$ /index.php?modulo=blog&action=$1 [L]

In questo modo come intuisci la regola di riscrittura entra in scena solo nel caso la tua url comincia con blog/... e non anche quando magari stai chiamando un vero file statico da un altra cartella.

Direi che così vai alla grande ;)
 
L'unica cosa che mi premeva di suggerirti l'hai recepita d'intuito, bravo.
Mi riferisco all'utilizzo delle parametriche fisse nella regex, tipo:
Codice:
RewriteRule ^blog/([^/]*)\.html$ /index.php?modulo=blog&action=$1 [L]

In questo modo come intuisci la regola di riscrittura entra in scena solo nel caso la tua url comincia con blog/... e non anche quando magari stai chiamando un vero file statico da un altra cartella.

Direi che così vai alla grande ;)

Sì l'ho decisamente intuita.
Anche perché mi pare di aver capito che riscrive una regola ad una, nel senso che quelle troppo generiche poi finiscono col non funzionare. E' come con i bambini, bisogna proprio dirgli tutto

:D

Ora però devo ritornare nel codice e fare le dovute sostituzioni, giusto?
Chiedo prima di cominciare così sono sicuro di non fare ancora danno. Non si sa mai.
Ahahahah
 
Questa, ad esempio (paginazione automatica di prendi-prendi dal database), non la piglia.
Mi pare sia uguale alle altre, no?

Codice:
RewriteRule ^portfolio/([^/]*)/([^/]*)/([^/]*)\.html$ /index.php?modulo=portfolio&tab=$1&limit=$2&lastpag=$3 [L]
 
Si la regexp presenta un errore:
Codice:
([^/]*)\.html

in questo punto gli dici di selezionare tutto finché non trova uno slash, ma di slash non ce ne sono più, per cui devi dirgli di prendere tutto fino al punto:
Codice:
([^\.]*)\.html
 
Ah, c'hai ragione.
Ora ho cominciato a riscrivere le URL nel codice.

Non capisco perché se digito (manualmente io) l'indirizzo
miosito.it/portfolio/wordpress.html mi rimane su vetrina.html

...sulla paginazione poi sono riuscito a capirmi e penso di aver concluso con successo.
Manca giusto il passaggio da una "sottopagina" all'altra...

Oh, sottinteso come sempre: grazie a tutti, eh <3
 
Come si suole dire: work in progress.
Le regole che riscrivono la parte di portfolio funzionano e funzionano tutte, finalmente.
Le ho incollate anche per la parte riguardante il blog ma, non so perché, questa volta non funzionano.
Eppure il meccanismo è/era il medesimo dall'inizio.
Mi sfugge qualcosa?

Codice:
RewriteEngine On
RewriteBase /htdocs/

# Moduli standard
RewriteRule ^([^/]*)\.html$ /index.php?modulo=$1 [L]

# Derivati del Portfolio
RewriteRule ^portfolio/([^/]*)\.html$ /index.php?modulo=portfolio&tab=$1 [L]
RewriteRule ^portfolio/vetrina/([^/.]*)\.html$ /index.php?modulo=portfolio&tab=vetrina&limit=$1 [L]
RewriteRule ^portfolio/vetrina/([^/]*)/ultima\.html$ /index.php?modulo=portfolio&tab=vetrina&limit=$1&lastpag=ultima
RewriteRule ^portfolio/facetabs/([^/.]*)\.html$ /index.php?modulo=portfolio&tab=facetabs&limit=$1 [L]
RewriteRule ^portfolio/facetabs/([^/]*)/ultima\.html$ /index.php?modulo=portfolio&tab=facetabs&limit=$1&lastpag=ultima
RewriteRule ^portfolio/wordpress/([^/.]*)\.html$ /index.php?modulo=portfolio&tab=wordpress&limit=$1 [L]
RewriteRule ^portfolio/wordpress/([^/]*)/ultima\.html$ /index.php?modulo=portfolio&tab=wordpress&limit=$1&lastpag=ultima

# Derivati dal Blog
RewriteRule ^([^/]*)/([^/]*)/([^/.]*)\.html$ /index.php?modulo=$1&id_post=$2&titolo=$3 [L]
RewriteRule ^blog/viewall\.html$ /index.php?modulo=blog&action=viewall [L]
[B]RewriteRule ^blog/viewall/([^/.]*)\.html$ /index.php?modulo=blog&action=viewall&limit=$1 [L][/B]
RewriteRule ^blog/viewall/([^/]*)/ultima\.html$ /index.php?modulo=blog&action=viewall&limit=$1&lastpag=ultima [L]

Mi sa che a fine topic riassumerò tutto in una piccola guida per i posteri.
Non vorrei qualcun altro si dannasse fino a questo punto al posto mio... :)
 
Ultima modifica:

Discussioni simili