PDA

View Full Version : [Apache|PHP] Problema con mod rewrite


UnknownSoldier
22-11-2009, 16:30
Salve.
Ho un problema con il mod rewrite di apache che non riesco proprio a capire e quindi a risolvere. Dunque, ho una regola di riscrittura:

RewriteRule ^(.*)_(.*)_(.*).html$ index.php?c=$1&idcol=$2&lang=$3 [L]

Il problema è che se ad esempio vado ad utilizzare il nuovo link in PHP in questo modo: visualizzatipi_1_it.html, i parametri get non vengono passati correttamente!

Infatti $_GET['c'] andrà a valere "visualizzatipi_1", $_GET['idcol'] sarà nullo e $_GET['lang'] sarà "it".

Perchè la variabile di parametro "c" comprende più del dovuto?? Dov'è che sbaglio?

Spero che ci sia qualcuno che possa aiutarmi, sto impazzendo :doh:
Grazie mille

kingv
22-11-2009, 17:17
la wildcard . (punto) fa il match anche con l'underscore.

prova con ^([^_]*)_([^_]*)_([^_]*).html oppure una un matcher non "greedy"

UnknownSoldier
22-11-2009, 18:35
la wildcard . (punto) fa il match anche con l'underscore.

prova con ^([^_]*)_([^_]*)_([^_]*).html oppure una un matcher non "greedy"

Purtroppo il risultato è lo stesso... cosa intendi con matcher non "greedy"?

kingv
22-11-2009, 22:20
Purtroppo il risultato è lo stesso... cosa intendi con matcher non "greedy"?

non importa, la regexp è giusta:

$ echo visualizzatipi_1_it.html | perl -npe 's/^(.*)_(.*)_(.*).html$/index.php?
c=$1&idcol=$2&lang=$3/'
index.php?c=visualizzatipi&idcol=1&lang=it

abilita il log di mod rewrite :

RewriteLog /tmp/quelchevuoi
RewriteLogLevel 3

e posta l'output di una chiamata

UnknownSoldier
23-11-2009, 09:24
non importa, la regexp è giusta:

$ echo visualizzatipi_1_it.html | perl -npe 's/^(.*)_(.*)_(.*).html$/index.php?
c=$1&idcol=$2&lang=$3/'
index.php?c=visualizzatipi&idcol=1&lang=it

abilita il log di mod rewrite :

RewriteLog /tmp/quelchevuoi
RewriteLogLevel 3

e posta l'output di una chiamata

Scusa ma dov'è che devo digitare quel codice? Ho provato a metterlo nel file .htaccess ma se apro una qualsiasi pagina mi viene lanciato l'errore 500 o_O

kingv
23-11-2009, 09:51
Scusa ma dov'è che devo digitare quel codice? Ho provato a metterlo nel file .htaccess ma se apro una qualsiasi pagina mi viene lanciato l'errore 500 o_O

RewriteLog e RewriteLogLevel non possono stare in htaccess ma solo nella configurazione principale del server o in un virtual host.

Se hai accesso solo all'htaccess non puoi abilitarli

UnknownSoldier
23-11-2009, 09:55
RewriteLog e RewriteLogLevel non possono stare in htaccess ma solo nella configurazione principale del server o in un virtual host.

Se hai accesso solo all'htaccess non puoi abilitarli

Ma io sto lavorando in locale, quindi in qualche modo potrei modificare questa impostazione no? Solo che non so come

SerMagnus
23-11-2009, 10:06
nel file di configurazione di apache ;)

UnknownSoldier
23-11-2009, 10:13
nel file di configurazione di apache ;)

Sì ma in che posizione di preciso?

kingv
23-11-2009, 11:18
Sì ma in che posizione di preciso?

su che sistema?
su linux dipende dalle distribuzioni, su quelle stile red hat è /etc/httpd/conf/httpd.conf
Su Windows conf\httpd.conf nella directory di installazione

UnknownSoldier
23-11-2009, 11:50
su che sistema?
su linux dipende dalle distribuzioni, su quelle stile red hat è /etc/httpd/conf/httpd.conf
Su Windows conf\httpd.conf nella directory di installazione

Non intendevo questo, il file di configurazione so dov'è, solo che non so in quale punto del file devo inserire quel codice.

UnknownSoldier
23-11-2009, 14:35
Ho provato con un'altra riscrittura, diversa dal problema precedente:

RewriteRule ^(.*).html$ index.php?c=$1 [L]

Il camuffamento dei link funziona bene, nel senso che se ad esempio uso login.html, si viene correttamente reindirizzati a index.php?c=login

MA: quando accedo alla mia directory (es. http://localhost/myproject), viene effettuata una stranissima richiesta ad index.php con parametro "c" uguale a "index".

Ancora più strano poichè nella mia directory è presente anche index.html, che dovrebbe essere letta per prima.

Insomma, è così tanto difficile usare questo maledetto mod rewrite? :doh:
Io non capisco come risolvere questi problemi...

kingv
23-11-2009, 15:33
quella che vedi è una richiesta generata da mod_autoindex che per listare il contenuto di una directory crea una subrequest per index.html che viene poi intercettata dalla regola di rewrite che hai impostato.

kingv
23-11-2009, 15:33
Non intendevo questo, il file di configurazione so dov'è, solo che non so in quale punto del file devo inserire quel codice.

dove vuoi, nella configurazione principale o all'interno della defiinzione di uno specificoi virtual host.

UnknownSoldier
23-11-2009, 17:53
Grazie ho risolto, il problema è che prima di quelle regole, ce n'erano altre più generiche e quindi venivano considerate quelle e basta :D

UnknownSoldier
23-11-2009, 18:06
Raga vorrei un consiglio. E' la prima volta che uso in modo massiccio il mod rewrite, e so che serve maggiormente per avere più successo nei motori di ricerca. Quindi è inutile riscrivere i link accessibili nelle pagine che richiedono il login giusto?? Dato che un motore di ricerca non può avere accesso... vorrei una conferma ^^