Newsgroup: it.comp.www.php
Titolo: htaccess: eliminare il nome del file php dall'url

http://www.sito.it/resource.php?a=1
 
http://www.sito.it/resource.php?a=1&b=2
 
http://www.sito.it/resource.php?a=1&b=2&c=3
 
http://www.sito.it/resource.php?a=1&b=2&c=3&d=4
 
eccetera...
 
voglio trasformarli in:
 
http://www.sito.it/1
 
http://www.sito.it/1/2
 
http://www.sito.it/1/2/3
 
http://www.sito.it/1/2/3/4
 
eccetera...
 
Come devo impostare il file .htaccess?

 
 
 
Al massimo vuoi fare il contrario (spero)
 
non testato:
 
RewriteRule ^([0-9]+)$ resource.php?a=$1 [L]
RewriteRule ^([0-9]+)/([0-9]+)$ resource.php?a=$1&b=$2 [L]
eccetera...
 
 
ps: Queste domande non sono inerenti a php, dovresti farle su webmaster 0 
server. 


 
pensavo che chi usa php fosse un po' esperto anche di routing, cmq ormai 
è fatta

On Thu, 22 Nov 2012 10:20:39 +0100, alex <1j94...@sneakemail.com.invalid>
wrote:

ErrorDocument resource.php
 
E poi dentro a resource.php fai il parsing della request URI e della
query string.
 
Leonardo
 
-- 
What would'st thou do, my squire so gay, that rides beside my reine
Were ye Glenallan's Earl this tide, and I were Roland Cheyne?
To turn the rein were sin and shame, to fight were wondrous peril:
What would ye do now, Roland Cheyne, were ye Glenallan's Earl?

 ErrorDocument resource.php
 
non sembra funzionare :-(

non sembra funzionare :-(
 
Suvvia, un'occhiata al manuale :-D
 
	ErrorDocument	404	/resource.php
 
Poi nel file guardi o $_SERVER['REDIRECT_URL'] oppure $_SERVER['REQUEST_URI'],
dove c'e' anche la query string. Se no la trovi in REDIRECT_QUERY_STRING, dove
e' definita.



 
 
forse non hai capito...
 
 
 
Errore del server!
 
Il server ha generato un errore interno e non è in grado di soddisfare 
la richiesta. Il server potrebbe essere sovraccarico oppure si è 
verificato un errore in uno script CGI.
 
Se pensi che questo sia un errore del server, per favore contatta il 
webmaster.
Error 500
siti.local
Apache/2.4.2 (Win32) OpenSSL/1.0.1c PHP/5.4.4
 
 
 
Ad ogni modo, prova un po' tu
http://ge.tt/7HRP9FS/v/0
 

 è fatta
 
Il routing (di rete) è un'altra cosa.
Il routing delle richieste web lo si fa a livello applicativo, come ti ha 
spiegato Leonardo.
 
Puoi usare questo:
 
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
 
che praticamente dice "tutto quello che non è un link, una directory o un 
file passalo al file index.php, in una variabile di nome q".
 
Poi dall'index.php esamini $_GET['q'] e $_SERVER e ti fai il routing.
 
Occhio che se richiami 
http://sito/a/b/c?q=1
 spacchi tutto. :P
 
Bye.

forse non hai capito...
 
Credo di aver capito, ma rileggi quello che ho scritto: e' un po' diverso
dalla prima versione abborracciata.
 
Cause possibili del tuo problema: l'istruzione ErrorDocument non e' stata
autorizzata per .htaccess (non hai "FileInfo" in AllowOverride, ma hai un
qualche AllowOverride, per cui .htaccess viene letta, ma rifiutata).
 
Oppure non hai modificato la riga ErrorDocument come nel secondo post, ed
hai ancora la versione cialtrona :-). Nel file error_log di Apache, trovi
indicazioni sulla causa.


 RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
 
mi sembra buono

 indicazioni sulla causa.
 
[Sat Nov 24 14:52:04.548750 2012] [core:alert] [pid 444:tid 1644] 
[client 
127.0.0.1:1670
] .../.htaccess: ErrorDocument takes two 
arguments, Change responses for HTTP errors
 
 

On Sat, 24 Nov 2012 15:00:28 +0100, alex <1j94...@sneakemail.com.invalid>
wrote:

OK... diagnosi confermata. La sintassi corretta è quella che ti ho scritto nel
secondo messaggio:
 
	ErrorDocument	404	/resource.php
 
Poi nel file guardi o $_SERVER['REDIRECT_URL'] oppure $_SERVER['REQUEST_URI'],
dove c'e' anche la query string. Se no la trovi in REDIRECT_QUERY_STRING, dove
e' definita.
 
Per chiarire, devi togliere la riga ErrorDocument esistente nel file .htaccess
e inserire quest'altra:
 
ErrorDocument	404	/resource.php


 ErrorDocument	404	/resource.php
 
innanzitutto la slash va tolta, perchè 'resource.php' si trova nella 
stessa dir di .htaccess.
Quindi in 'resource.php' ho messo:
 
<?php
echo 'REDIRECT_URL: ' .$_SERVER['REDIRECT_URL'].'<br>';
echo 'REQUEST_URI: ' . $_SERVER['REQUEST_URI'].'<br>';
echo 'REDIRECT_QUERY_STRING: ' . REDIRECT_QUERY_STRING.'<br>';
echo '$REDIRECT_QUERY_STRING: '  . $REDIRECT_QUERY_STRING.'<br>';//forse 
è una variabile (non una costante)
?>
 
ma stranamente l'unica cosa che appare nel browser è: resource.php
 
In realtà mi sembra che tale file non venga caricato affatto, infatti 
cancellando il codice appena scritto viene sempre visualizzato solamente 
'resource.php'.
Ho provato dunque ad eliminare completamente il file (lasciando solo . 
htaccess), e ho avuto la conferma di quando appena detto: resource.php 
viene completamente ignorato

viene completamente ignorato
 
Infatti. Non cominciando con uno slash, non viene considerato un file.


 Infatti. Non cominciando con uno slash, non viene considerato un file.
 
hai ragione ;)
 
Ad ogni modo però, come dice il manuale, il path è relativo alla 
DocumentRoot.
Invece io voglio applicare questo meccanismo, solo per una specifica 
sotto-directory del sito, e non per la root (ecco perchè ho avuto 
l'incauto istinto di togliere la slash).
Si può fare?
 
Ho provato per adesso il sistema suggerito da alessandro, e sembra andar 
bene...
 

bene...
 
Sono metodi equivalenti. Il sistema di Alessandro e' piu' flessibile, ed
e' anche piu' potente (puoi aggiungerci una o piu' RewriteCond). L'altro
sistema ha il vantaggio di non richiedere RewriteEngine, pero' vuol dire
che qualsiasi sofisticheria ti servisse, dovrai implementarla in PHP, ed
avrai si' maggior controllo, ma facendo piu' lavoro e, magari, errori.



 
ok, purtroppo però se .htaccess e handler.php vengono spostati in 
qualche altra cartella, bisogna aggiornare il percorso, vabè...