• User Newbie

    problema con mod_rewrite e ojs

    Salve, sto perdendo la testa per la trasformazione di un indirizzo.
    Il caso è questo, c'è un'organizzazione: www.institution.org

    questa offre un servizio di e-journals tramite un software che si chiama OJS:
    Il server che ospita il servizio ha un indirizzo tipo questo:

    www.ojs.institution.org

    Ed ogni Rivista ha un link come questo:

    www.ojs.institution.org/index.php/Journal1
    www.ojs.institution.org/index.php/Journal2
    etc etc

    Che non è una directory fisica ma una chiamata di funzione php interna.

    Mi è stato chiesto di trasformare i link alle riviste in questo:

    www.Journal1.institution.org
    www.Journal2.institution.org

    etc etc

    Quindi, prima di tutto ho chiesto all'amministratore di www.institution.org di creare dei domini di secondo livello per ogni Rivista
    www.Journal1.institution.org
    www.Journal2.institution.org
    etc etc
    E puntarli sul server che ospita il software: www.ojs.institution.org

    Ora devo far si che www.Journal1.institution.org punti:
    a www.ojs.institution.org/index.php/Journal1

    Ho provato con I Virtual Servers, ma ad ogni giornale non corrisponde una vera e propria directory, e, se ho capito bene non posso indirizzare la direttiva a una chiamata di funzione php (ovvero: www.ojs.institution.org/index.php/Journal).

    Peraltro il programma ha un sistema di configurazione interno che modifica tutti i link interni sull'indirizzo riscritto.

    E' come una catena, e mi manca solo l'anello centrale.

    Sto provando con mod_rewrite ma sono in panne. Se qualcuno mi aiuta è possibile che ci esce anche un piccolo compenso da parte dell'organizzazione.

    Grazie
    Orazio


  • User Attivo

    Ciao, forse ti serve qualcosa de tipo:

    
    RewriteCond %{HTTP_HOST}    ^www\.(.*)\.institution\.org$
    RewriteRule .* http://www.ojs.institution.org/index.php/%1 [R, L]
    
    

    potrebbe essere non corretto!
    perdonami sono di fretta, fra un paio d'ore o domattina ti rispondo un po piu correttamente 😉

    ok editato per correggere
    Dovrebbe fare a caso tuo
    Ciao


  • User Attivo

    Aggiungo ancora:
    se tutti i domini www.nomegiornale.example.org hanno la stessa document root, puoi addirittura utilizzare le banali regole di rewrite tipo:

    
    RewriteCond %{HTTP_HOST}    ^www\.(.*)\.institution\.org$
    RewriteCond %{REQUEST_URI}    ^(.*)$
    RewriteRule .* /index.php/%1/$1 [QSA, L]
    
    

    modificabile a seconda delle esigenze 😉

    ciao


  • Super User

    se i giornali son tanti puoi mettere una wildcard sul dominio e seguire queste istruzioni 🙂


  • User Newbie

    Grazie infinite, ho smanettato con i consigli che mi avete dato e leggendo un po' di documentazione ho fatto questo:

            
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www\.(.*)\.institution\.org$
    RewriteRule .* /index.php/%1/$1 [QSA,L] 
    
    ```E funziona! Nel senso che:
    [www.journal1.institution.org](http://www.journal1.institution.org) 
    mi porta effettivamente sulla pagina del journal1
    ovvero quella che senza rewrite è data dall'url:
    http://www.ojs.institution.org/index.php/journal1
    
    Solo che c'è un problema, non funzionano più i fogli di stile, non si vedono le immagini, non funzionano i link.
    
    Controllo nell'html prodotto, il link al foglio di stile appare così:
    http://www.journal1.institution.org/styles/common.css
    
    mentre il path reale è:
    http://www.ojs.institution.org/styles/common.css
    
    Se metto uno di questi due indirizzi nel browser, ottengo la pagina 
    di index del journal1 o di ojs, penso sia il modo di comportarsi del software 
    quando avviene una chiamata su un persorso che lui 
    non riconosce.
    
    Se invece metto il secondo indirizzo senza www:
    
    http://ojs.institution.org/styles/common.css
     
    ottengo il listato del css.
    
    A questo punto non so se è un problema del CMS o ancora del mod_rewrite.
    Grazie di cuore
    Orazio

  • Super User

    chiaramente essendoti cambiato l'indirizzo base e se usi url relativi non funziona niente.. 😉

    il metodo più veloce per risolvere è mettere in <head>

    <base href="http://www.ojs.institution.org/" />
    

  • User Attivo

    la soluzione di osvi è la più rapida, ma se vuoi smanettrare ancora con l'htaccess puoi aggiungere questo:

    
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www\.(.*)\.institution\.org$
    RewriteCond %{HTTP_HOST} !^www\.ojs\.institution\.org$
    RewriteRule .* /index.php/%1/$1 [QSA,L]
    

    cosi in pratica non ti rtiscrive gli url di ojs, in quanto non è un giornale 😉

    Ciao


  • User Newbie

    Grazie, sto facendo dei tentativi ma ancora non si risolve il problema.
    Questo perchè nella head dei files compaiono alcune variabili di SMARTY che richiamano il path riscritto e non quello reale con cui funzionano CSS e Immagini.

    Ho scritto al forum di OJS:

    How can I hack the $baseUrl and the $cssUrl variables modifying statically the first part of URL to: "www.ojs.intitution.org"?e la risposta è stata:

    you should be able to get your static content (e.g. CSS) working with a mod_rewrite rule that supercedes your existing rules for cases where the index.php script is not specified.Sono piuttosto demoralizzato.
    grazie ancora


  • User Attivo

    Questa soluzoine puo andare bene?

    
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www\.(.*)\.institution\.org$
    RewriteCond %{HTTP_HOST} !^www\.ojs\.institution\.org$
    #evitiamo di riscrivere tutto quello che non ha index.php nell'url
    RewriteCond %{REQUEST_URI} !/index\.php.*
    RewriteCond %{REQUEST_URI} ^(.*)$
    RewriteRule .* /index.php/%1/$1 [QSA,L]
    
    

  • User Newbie

    Thesee grazie,
    scusa se non ho risposto subito, ma ho preferito studiare ancora un po' e far frutto dei consigli giunti fin ora e ... la regola esatta sempre essere questa:

    
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www\.(.*)\.institution\.org$
    RewriteCond %{HTTP_HOST} !^www\.ojs\.institution\.org$
    RewriteCond %{REQUEST_URI} !^/(public|templates|style)/.*$ 
    RewriteRule (.*) /index.php/%1/$1 [QSA,L]
    
    ```I path in:
    RewriteCond %{REQUEST_URI} !^/(public|templates|style)/.*$ 
    sono specifici del software ojs per i settaggi alle riviste
    
    E per ora sempbra funzionare!! Non abbiamo sperimentato il comportamento in fase di Admin, ti farò sapere.
    
    GRAZIE! GRAZIE! Grazie per l'aiuto!

  • User Attivo

    ottimo 😉 buon proseguimento 🙂