Visualizzazione risultati 1 fino 18 di 18

Discussione: [Apache] Problema col RewriteEngine

  1. #1
    codx non è connesso Neofita
    Data registrazione
    07-09-2012
    Messaggi
    16

    Question Problema riscrittura sottodomini

    Ciao a tutti,
    per organizzare un po meglio i contenuti del mio sito ho aggiunto delle rewrite rules nell'htaccess della root del mio sito come segue:
    Codice:
    ...
    # Fourth level domains
    RewriteBase /
    # Android
    RewriteCond %{HTTP_HOST} android.codx.altervista.org
    RewriteCond %{REQUEST_URI} !projects/android/
    RewriteRule ^(.*)$ /projects/android/$1 [L]
    # Unity
    RewriteCond %{HTTP_HOST} unity.codx.altervista.org
    RewriteCond %{REQUEST_URI} !projects/unity/
    RewriteRule ^(.*)$ projects/unity/$1 [L]
    ...
    finora sembravano funzionare a dovere (e per il sottodominio android sembra funzionare tuttora ma in effetti non ho ubdirectories per ora) ma ieri mi sono accorto che scrivendo nella barra url del browser un indirizzo come
    Codice:
    http://unity.codx.altervista.org/doc/androidcommons/
    è tutto ok ma se non metto lo slash finale e scrivo
    Codice:
    http://unity.codx.altervista.org/doc/androidcommons
    alla pressione di invio l'indirizzo mi cambia in
    Codice:
    http://unity.codx.altervista.org/projects/unity/doc/androidcommons/
    la pagina viene caricata ugualmente ma l'indirizzo è sbagliato... profondamente sbagliato visto che mettendo sia il sottodominio unity. sia il prefisso /projects/unity/ nell'uri in teoria diventa ricorsivo.

    la struttura delle diractory interessate è
    Codice:
    /.htaccess
    /projects/android/...
    /projects/unity/...
    io non so dove mettere le mani, pensavo che questo problema fosse prevenuto dalla seconda RewriteCond!!!
    qualcuno saprebbe dirmi come risolvere questo problema?
    Ultima modifica di codx : 07-04-2013 alle ore 14.38.03

  2. #2
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Nella rewrite rule dici che se non c'è "projects/unity/" allora deve essere aggiunto. Nel tuo post però sembri voler dire qualcosa di diverso.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  3. #3
    codx non è connesso Neofita
    Data registrazione
    07-09-2012
    Messaggi
    16

    Predefinito

    spiegarmi è sempre un problema: P
    no, io non voglio che venga aggiunto perchè l'url deve essere
    Codice:
    // senza rewrite
    http://codx.altervista.org/...
    // con rewrite
    http://unity.codx.altervista.org/.. 
    // invece con rewrite mi esce
    http://unity.codx.altervista.org/projects/unity/...
    // che apparentemente punta a
    http://codx.altervista.org/projects/unity/projects/unity/...
    // ripetendo la subdir...  :S

  4. #4
    codx non è connesso Neofita
    Data registrazione
    07-09-2012
    Messaggi
    16

    Question [Apache] Problema col RewriteEngine

    Ciao a tutti,
    ho già aperto un thread a riguardo ma era nella sezione sbagliata e a quanto pare non ero stato chiaro quindi riapro qua.

    Background:
    Ho deciso di usare URL "personalizzati" per le varie sezioni del sito e le sezioni sono salvate a partire dalla root del sito nella sottocartella /projects/ in cui, appunto, c'è una cartella per ogni sezione (quindi /projects/android , /projects/unity e forse un giorno ce ne saranno altre :P )

    Obbiettivo:
    L'idea è di trasformare gli URL in questo modo
    Codice:
    // ad esempio
    // da (senza rewrite)
    http://codx.altervista.org/projects/unity/doc/virtualjoystick/
    // a (con rewrite)
    http://unity.codx.altervista.org/doc/virtualjoystick/
    Come mi sono organizzato:
    Nell'.htaccess della root del sito ho aggiunto queste regole
    Codice:
    RewriteEngine on
    RewriteBase /
    ...
    # Unity
    RewriteCond %{HTTP_HOST} unity.codx.altervista.org  # se l'host è unity.eccetera
    RewriteCond %{REQUEST_URI} !^/projects/unity(.*)$  # e se l'uri non punta la sottocartella
    RewriteRule ^(.*)$ /projects/unity/$1 [L]  # vai a prendere l'uri del sottodominio a partire dalla cartella (root)/projects/unity/
    ...
    Problema:
    Apparentemente funziona nel senso che se io scrivo l'indirizzo con dominio di quarto livello lui mi punta la index correttamente senza fare danni peccato che se io vado all'indirizzo sopra citato (notare la differenza tra l'href di questo link e l'indirizzo effettivo della pagina in cui viene aperto) mi ritrovi le sottocartelle nell'URL (rima non voluta ma visto che c'è lasciamola :P )

    Ho passato le ultime due ore a cercare di capire al meglio il funzionamento del rewrite engine ma non sono arrivato a nulla di diverso da quanto già avevo (se non il caso generale (.*).codx.altervista.org che preferisco non usare)... Onestamente sono cotto quindi chiedo a voi che probabilmente non dovete nemmeno starci a pensare troppo... come posso evitare di ritrovarmi la sottocartella nel sottodominio?

    In pratica, come forzare il primo tipo di indirizzo ed evitare il secondo?
    Codice:
    // PRIMO (DA EVITARE), come si nota, c'è sia il sotto-dominio, sia la sotto-cartella
    http://unity.codx.altervista.org/projects/unity/doc/virtualjoystick/
    // SECONDO (FORMA DESIDERATA), la sotto-cartella viene sostituita dal sotto-dominio
    http://unity.codx.altervista.org/doc/virtualjoystick/
    Un mezzo papiro, lo so, ma non sono stato chiaro la prima volta, cerco di esserlo questa.
    Ultima modifica di codx : 08-04-2013 alle ore 20.11.11

  5. #5
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Sicuramente aprire una nuova discussione era l'unica cosa da non fare perché confondi solo la gente.

    Poi senza scrivere papiri, perché spiegarsi non vuol dire scrivere molte parole, bastava dire che vuoi che http://codx.altervista.org/projects/...rtualjoystick/ diventi http://unity.codx.altervista.org/doc/virtualjoystick/.

    Il tuo codice di rewrite però parte dalla condizione che il dominio sia unity.codx.altervista.org, quindi non applica le regole all'URL di partenza e quindi tutto il resto è privo di significato. Le RewriteCond sono delle condizioni che si devono verificare affinché poi si applichi la riscrittura.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  6. #6
    codx non è connesso Neofita
    Data registrazione
    07-09-2012
    Messaggi
    16

    Predefinito

    direi che la condizione si verifica primo perchè altrimenti non raggiungerebbe la pagina giusta, secondo perché richiedo che l'http host sia unity.codx.altervista.org ed è esattamente così (son arrivato addirittura a sniffare i pacchetti http con wireshark per verificarlo, era del tutto superfluo ma non sapevo più dove andare a parare)
    certo che al posto di criticare il mio tentativo di spiegarmi dando tutti i dati che ritenevo necessari (i post standard sono brevi e il risultato sono 10 risposte che altro non sono che domande) potresti proporre una soluzione invece di lamentarti... non mi sembra di aver fatto chissà che malvagia cosa...

  7. #7
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Tu pensa a me che mi sono dovuto leggere tutto quello che hai scritto Fortuna che almeno scrivi cose che si capiscono, a differenza di altri.

    Però continui a non capire quello che ti sto dicendo.

    Se arrivi con l'URL codx.altervista.org la rewrite non si attiva perché imponi nella condizione che il dominio sia unity.codx.altervista.org.

    Se arrivi con unity.codx.altervista.org vai alla seconda condizione che dice che l'URL non deve cominciare per /projects/unity. Se quella parte di percorso manca allora viene aggiunta.

    Bene. Allora mi spieghi perché (ed è questo il mio dubbio per cui ancora non hai ricevuto una risposta) nel tuo posti dici:

    L'idea è di trasformare gli URL in questo modo
    Che è esattamente l'inverso di quello che hai messo nel tuo htaccess!


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  8. #8
    codx non è connesso Neofita
    Data registrazione
    07-09-2012
    Messaggi
    16

    Predefinito

    Ti spiego subito e la spiegazione è estremamente semplice: sono un po' incapace xD
    Giuro ce la sto mettendo tutta per cercare di capire come funziona sto mod_rewrite ma davvero non ci arrivo. :P
    Vero che dico
    Se arrivi con unity.codx.altervista.org vai alla seconda condizione che dice che l'URL non deve cominciare per /projects/unity. Se quella parte di percorso manca allora viene aggiunta.
    però io vorrei che /projects/unity/ venga aggiunto, si, ma internamente, vorrei che non venisse visualizzato nella barra url del client.

    Cioè di fatto vorrei che se il dominio è unity.codx.altervista.org la root "si sposti" a /projects/unity/
    se la root è quella io non dovrei accodare di nuovo projects/unity/ perchè così facendo punterei a /projects/unity/projects/unity/

  9. #9
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Il rewrite è interno. E un codice del genere è sufficiente a soddisfare i tuoi requisiti:

    Codice:
    RewriteBase /
    RewriteCond %{HTTP_HOST} unity.codx.altervista.org
    RewriteRule ^(.*)$ projects/unity/$1 [L]
    Poi chiaramente gli URL presenti sul sito che puntano a quel quarto livello non devono cominciare per projects/unity, ma alla root.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  10. #10
    codx non è connesso Neofita
    Data registrazione
    07-09-2012
    Messaggi
    16

    Predefinito

    Codice:
    RewriteBase /
    RewriteCond %{HTTP_HOST} unity.codx.altervista.org
    RewriteRule ^(.*)$ projects/unity/$1 [L]
    scritto così però mi da un bel 500...

  11. #11
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    È copia-incollato da quello che avevi scritto sopra. C'è altro nel tuo htaccess?


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  12. #12
    codx non è connesso Neofita
    Data registrazione
    07-09-2012
    Messaggi
    16

    Predefinito

    si, scusami, te lo posto per intero

    Codice:
    # Rewirite rules
    RewriteEngine on
    
    # Basic rules
    RewriteRule ^article-([a-zA-Z0-9_-\s!.]+)$ /article.php?id=$1
    
    # Fourth level domains
    RewriteBase /
    # Android
    RewriteCond %{HTTP_HOST} android.codx.altervista.org
    RewriteCond %{REQUEST_URI} !^/projects/android(.*)$
    RewriteRule ^(.*)$ /projects/android/$1 [L]
    # Unity
    RewriteCond %{HTTP_HOST} unity.codx.altervista.org
    RewriteCond %{REQUEST_URI} !^/projects/unity(.*)$
    RewriteRule ^(.*)$ /projects/unity/$1 [L]
    
    # Saitfainder's Unity version
    #RewriteBase / # ho provato sia con sia senza questa riga (visto che c'era già sopra)
    #RewriteCond %{HTTP_HOST} unity.codx.altervista.org
    #RewriteRule ^(.*)$ projects/unity/$1 [L]
    
    # HTTP/1.1 errors redirecting
    ErrorDocument 403 /error.php?id=403
    ErrorDocument 404 /error.php?id=404

  13. #13
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Ed è questo che ha dato 500? Mi pare tutto corretto.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  14. #14
    codx non è connesso Neofita
    Data registrazione
    07-09-2012
    Messaggi
    16

    Predefinito

    no, ha dato 500 la tua versione, quindi commentando le mie 3 regole per unity e decommentando le tue due

    comunque sono d'accordo, sono tutto l'opposto di un esperto di apache e mod_rewrite ma sembra assurdo anche a me che togliendo una condizione il file venga addirittura considerato non well-formed... capisco che possa non avere l'effetto desiderato ma 500 è una cosa un po pesante...

    Addirittura:

    Internal Server Error


    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator, info@altervista.org and inform them of the time the error occurred, and anything you might have done that may have caused the error.

    More information about this error may be available in the server error log.

    Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
    Ultima modifica di codx : 11-04-2013 alle ore 15.31.52

  15. #15
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Inutile incollare l'errore 500, tanto non dice niente.

    Comunque non è possibile che abbia dato errore perché le righe sono identiche, ne manca solo una. Ho anche provato il tuo htaccess non ha dato errori 500, quindi deve essere stato qualcos'altro a scatenarlo quando lo hai testato.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  16. #16
    codx non è connesso Neofita
    Data registrazione
    07-09-2012
    Messaggi
    16

    Predefinito

    l'ho testato diverse volte di fila alternando le due versioni e senza cambiare assolutamente altro...

    comunque ho postato il messaggio di errore perchè aggiunge informazioni nella parte sottolineata in quanto fa riferimento alle ultime due regole dell'htaccess (quelle relative ai messaggi di errore) e magari il problema è legato anche a quello! ti sto proprio antipatico, eh!? in un modo o nell'altro quello che posto io non ti va mai bene!

  17. #17
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    No, quel messaggio dell'errore 500 è generico. E no, non mi stai antipatico, penso sono che sei in grado di capire quello che ti dico e quindi lo faccio :-)

    Cmq c'è qualcosa che non quadra. Se uso il tuo htaccess non ottengo errori. Puoi incollare la versione che ti da l'errore?


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  18. #18
    codx non è connesso Neofita
    Data registrazione
    07-09-2012
    Messaggi
    16

    Predefinito

    da 500 sia in questa configurazione
    Codice:
    # Rewirite rules
    RewriteEngine on
    
    # Basic rules
    RewriteRule ^article-([a-zA-Z0-9_-\s!.]+)$ /article.php?id=$1
    
    # Fourth level domains
    RewriteBase /
    # Android
    RewriteCond %{HTTP_HOST} android.codx.altervista.org
    RewriteCond %{REQUEST_URI} !^/projects/android(.*)$
    RewriteRule ^(.*)$ /projects/android/$1 [L]
    # Unity
    RewriteCond %{HTTP_HOST} unity.codx.altervista.org
    RewriteRule ^(.*)$ projects/unity/$1 [L] # provato anche la variante con / prima di projects/unity$1
    
    # HTTP/1.1 errors redirecting
    ErrorDocument 403 /error.php?id=403
    ErrorDocument 404 /error.php?id=404
    sia in questa (solo ripetuto il RewriteBase)
    Codice:
    # Rewirite rules
    RewriteEngine on
    
    # Basic rules
    RewriteRule ^article-([a-zA-Z0-9_-\s!.]+)$ /article.php?id=$1
    
    # Fourth level domains
    RewriteBase /
    # Android
    RewriteCond %{HTTP_HOST} android.codx.altervista.org
    RewriteCond %{REQUEST_URI} !^/projects/android(.*)$
    RewriteRule ^(.*)$ /projects/android/$1 [L]
    # Unity
    RewriteBase /
    RewriteCond %{HTTP_HOST} unity.codx.altervista.org
    RewriteRule ^(.*)$ projects/unity/$1 [L] # provato anche la variante con / prima di projects/unity$1
    
    # HTTP/1.1 errors redirecting
    ErrorDocument 403 /error.php?id=403
    ErrorDocument 404 /error.php?id=404
    il seguente invece funziona ma col problema iniziale
    Codice:
    # Rewirite rules
    RewriteEngine on
    
    # Basic rules
    RewriteRule ^article-([a-zA-Z0-9_-\s!.]+)$ /article.php?id=$1
    
    # Fourth level domains
    RewriteBase /
    # Android
    RewriteCond %{HTTP_HOST} android.codx.altervista.org
    RewriteCond %{REQUEST_URI} !^/projects/android(.*)$
    RewriteRule ^(.*)$ /projects/android/$1 [L]
    # Unity
    RewriteCond %{HTTP_HOST} unity.codx.altervista.org
    RewriteCond %{REQUEST_URI} !^/projects/unity(.*)$
    RewriteRule ^(.*)$ /projects/unity/$1 [L]
    
    # HTTP/1.1 errors redirecting
    ErrorDocument 403 /error.php?id=403
    ErrorDocument 404 /error.php?id=404

Tags for this Thread

Regole di scrittura

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