-
Problema con mod_rewrite
Sono un nuovo utente .... ho attivato il modulo mod_rewrite.
poi ho modificato .htaccess con
le seguenti righe :
RewriteEngine on
RewriteRule ^/miosito/(.*)$ ^/miosito/index.php?page=$1$
ma non funzione ! non sembra cambiare nessun link
dove sbaglio?
Altrimenti avevo provato ad usare socket_create .... ma non sembra caricato il modulo socket_mod in php
-
RewriteEngine on
RewriteRule ^/miosito/(.*)$ /miosito/index.php?page=$1
prova cosi.
-
Io farei:
RewriteEngine on
RewriteBase /
RewriteRule ^(.*)$ /index.php?page=$1
Questo per:
1) un .htaccess posto nella ROOT dello spazio (ovviamente).
2) per passare qualsiasi percorso richiesto al sito come parametro allo script index.php (che spero fosse la tua esigenza altrimenti parliamone.. ho solo dedotto dal tuo codice)
Ma c'è ancora una questione più oscura, questa tua frase:
«ma non funzione ! non sembra cambiare nessun link»
Attenzione, con il mod_rewrite gestisci SOLO gli url richiesti al webserver Apache modificandoli in modo da passare la richiesta allo script apposito o altra risorsa.
Ma non cambierà mai nessun link!!!
come potrebbe? dovrebbe modificare il tuo codice html?
questo volevi? spero di aver frainteso io.
edit:
per "link" io intendo = "collegamento ipertestuale"
quindi i link all'interno di una pagina html, "cliccabili" per capirci.
-
Non riesco che funzioni.
il mio sottodomimio supponiamo sia "miosito"
ho creato una cartella nominata site1
vorrei che quando chiamo http://miosito.altervista.org/site1/prova.php?query=aaa
dal browser mi trasformasse url in
http://miosito.altervista.org/site1/....php?query=aaa
ho provato in tutti i modi ma non funziona ... neppure come avete detto voi.
Addirittura ora non funziona neppure il richiamo diretto a
http://miosito.altervista.org/site1/index.php .... mi dice che la pagina non esiste.
ma il file esiste. Non ci sto capendo piu nulla.
Il file index.php .... preleva la pagina dalla query (se non ce mette di default quella iniziale del sito site1) e redirige la richiesta sul mio ip di casa.
-
Ora il link http://miosito.altervista.org/site1/index.php .... lo trova cambiando la configurazione entro .htaccess
RewriteEngine on
RewriteRule ^(.*)$ index.php?page=$1
Ora è tornato il problema di prima .... se chiamo l'url
http://miosito.altervista.org/site1/index.php .... mi redirige correttament al mio ip la pagina ma se kiamo un altra pagina ... tipo
http://miosito.altervista.org/site1/...er.php?lang=it
mi dice che non trova la pagina come se non cambiasse url in
http://miosito.altervista.org/site1/...er.php?lang=it
boh mistero.
-
Posta dei link reali, in modo che si possa avere un'idea più chiara.
-
Eh ma continui a togliere il RewriteBase :=D:
Ma soprattutto non dici dentro QUALE cartella hai metto il .htaccess...
Allora, segui alla lettera questa soluzione (se cambi qualcosa e non ti funziona indica cosa hai cambiato):
1) da pannello altervista, vai nella tua cartella /site1/
2) clicca sulle "rotelle" di questa cartella site1 e aggiungi questo preciso .htaccess:
RewriteEngine on
RewriteBase /site1/
RewriteCond %{REQUEST_URI} !/index\.php.*
RewriteRule ^(.*)$ index.php?page=$1
la RewriteCond è essenziale in questo caso, e serve ad evitare il rewrite nel caso si tratti della index.php stessa, che creerebbe un doppio richiamo del rewrite.. in parole povere ti ritrovi con index.php che si passa da solo come parametro page=index.php e non è quel che vuoi ovviamente.
A questo punto hai già più o meno risolto.
Ma mi sembra di aver capito che rimanevi perplesso per il fatto che l'url non cambiava nella barra dell'indirizzo (ho capito bene?)
ma NON deve cambiare! il mod_rewrite serve proprio a questo, cioè a mostrare l'url che è stato richiesto ma sotto sotto (lato server) andare a richiamare qualche altro script o risorsa diversi.
3) Per sincerarti di questo basta che nella pagina index.php da qualche parte ti scrivi a video queste righe php:
Codice PHP:
<?= $_SERVER['REQUEST_URI'] ?>
<br />
<?= $_SERVER['SCRIPT_NAME']."?".$_SERVER['QUERY_STRING'] ?>
Se chiedi il link tuosito/site1/ciccio.php
apparirà:
/site1/ciccio.php
/site1/index.php?page=ciccio.php
Un esempio "live" puoi vederlo temporaneamente qui:
http://heracleum.altervista.org/help/ciccio.php
/help/ sta alla tua /site1/, ciccio.php ovviamente non esiste è un esempio di come viene passato il parametro page alla index. E in fondo alla pagina puoi leggere il risultato dei due url prima/dopo.
L'url nella barra di indirizzo dunque non cambia.. A MENO CHE non forzi un redirect tramite il flag [R] che potresti aggiungere a fine riga del rewriterule.
Al momento rimane solo in sospeso il trasporto dei parametri in querystring durante la riscrittura... ora è un po' tardi.. comunque già un passo avanti è indicare sempre tramite flag della rewriterule che vuoi appendere (accodare) i parametri in querystring alla nuova querystring ( ?page=xxx)
Il flag è [QSA] (query string append) sempre da inserire in fondo alla riga, così:
RewriteRule ^(.*)$ index.php?page=$1 [QSA]
(se vuoi entrambi i flag usi la virgola: [R,QSA] )
Solo che index.php dovrebbe anche occuparsi di trasportare a sua volta tutti i parametri in request (tranne page ovviamente) alla pagina che deve trattare.
Se qualcuno ha una soluzione più brillante...
ciao
-
scusa se ho visto solo ora il messaggio .... grazie per l aiuto. Ci ho rimesso le mani oggi .... ho avuto da fare in questo periodo. Ho trovato un altra soluzione forse .... ma quando in php uso
$fp=@fsockopen($host_ip, 80, $errno, $errstr, 8);
$fp è falso anche quando ip esiste. Altro mistero
-
fsockopen ti torna false perché non puoi effettuare connessioni verso l'esterno qui su Altervista.
Ma immagino sia tutta un'altra questione rispetto al topic iniziale sul mod_rewrite