Visualizzazione risultati 1 fino 9 di 9

Discussione: Problema con mod_rewrite

  1. #1
    Guest

    Unhappy 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
    Ultima modifica di ocean0 : 25-04-2006 alle ore 21.56.48

  2. #2
    Guest

    Predefinito

    RewriteEngine on
    RewriteRule ^/miosito/(.*)$ /miosito/index.php?page=$1

    prova cosi.

  3. #3
    Guest

    Predefinito

    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.
    Ultima modifica di NoSpam : 26-04-2006 alle ore 01.12.59

  4. #4
    Guest

    Predefinito

    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.

  5. #5
    Guest

    Predefinito

    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.

  6. #6
    L'avatar di Gianluca
    Gianluca non è connesso Amministratore
    Data registrazione
    15-02-2001
    Messaggi
    18,035

    Predefinito

    Posta dei link reali, in modo che si possa avere un'idea più chiara.
    Gianluca

  7. #7
    Guest

    Predefinito

    Eh ma continui a togliere il RewriteBase
    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

  8. #8
    Guest

    Predefinito

    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

  9. #9
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    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
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •