2016-04-21 28 views
5

Quindi, ho sviluppato un'applicazione Laravel 5 completamente funzionante e l'ho distribuita sul server del mio cliente, eseguendo Apache2, PHP5 e MySQL. L'app funziona come previsto e gli URL vengono riscritti correttamente. Ora devo semplicemente clonare la mia app su un altro server, che esegue esattamente lo stesso stack. Il problema è che ho bisogno di mettere la mia app in una sottocartella, in modo che sia accessibile tramite URL che corrispondono al pattern domain2.com/movedApp.Spostare l'applicazione Laravel 5 nella sottocartella server

In altre parole: primo server risponde a:

domain1.com/my/routes 

Secondo server ha bisogno di rispondere a:

domain2/movedApp/my/routes 

ho cercato di riprodurre esattamente la direttiva VirtualHost che funziona secondo il primo server, aggiungendo /movedApp dove necessario e aggiungendo RewriteBase al file .htaccess nella nuova cartella public, ma senza alcun risultato.

Ho notato che le rotte siano correttamente seguiti da URL del tipo:

domain2.com/movedApp/public/index.php/my/routes 

Ancora ottengo 404 errore sul patrimonio in registro Apache2.

Con la presente viene segnalato il file .htaccess che si trova nella cartella public della mia applicazione Laravel funzionante.

.htaccess

<IfModule mod_rewrite.c> 
    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine on 

    # Redirect Trailing Slashes... 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    # Handle Front Controller... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^/index.php [L] 

</IfModule> 

mi riportano anche il file di configurazione utilizzato dal server web per servire la mia app

default.conf

<VirtualHost *:80> 
     ServerAdmin [email protected] 

     DocumentRoot /var/www/galmaster/public 
     <Directory /> 
       Options FollowSymLinks 
       AllowOverride None 
     </Directory> 
     <Directory /var/www/galmaster/public> 
       Options Indexes FollowSymLinks MultiViews 
       AllowOverride All 
       Order allow,deny 
       allow from all 
     </Directory> 

     ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 
     <Directory "/usr/lib/cgi-bin"> 
       AllowOverride None 
       Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
       Order allow,deny 
       Allow from all 
     </Directory> 

     ErrorLog ${APACHE_LOG_DIR}/error.log 

     # Possible values include: debug, info, notice, warn, error, crit, 
     # alert, emerg. 
     LogLevel warn 

     CustomLog ${APACHE_LOG_DIR}/access.log combined 
</VirtualHost> 
+0

hai avuto successo? – urfusion

+0

Sì, in realtà ho. Inserirò i dettagli non appena avrò un po 'di tempo libero. Sono riuscito a risolvere il problema con solo due file '.htaccess'. – ibanjo

+0

Ho inviato una risposta alla mia domanda per il check-out. Forse la mia soluzione funziona anche per te. – ibanjo

risposta

1

Quindi, ho giocato molto con VirtualHost (s), ma la soluzione migliore che ho trovato non li coinvolge affatto, ed eccola qui.

prima cosa da fare è configurare .htaccess file sia per la cartella principale dell'applicazione e la relativa cartella pubblica. Ho trovato un semplice file di lavoro .htaccess in this answer, che vi riporto qui:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^(.*)$ public/$1 [L] 
</IfModule> 

L'impostazione predefinita .htaccess funziona bene, invece, per la cartella public.

L'ultimo passaggio consiste nel configurare correttamente i percorsi in routes.php. La soluzione che funziona per me è piuttosto approssimativa, e forse si potrebbe trovare una soluzione più raffinata, ma ancora qui è.

// Get base (root) route 
$base_route = basename(base_path()); 

Route::get($base_route, function() { 
    return view('welcome'); 
}); 

Route::get($base_route.'/myRoute', function() { 
    return view('myRoute'); 
}); 

Quindi, in pratica è necessario anteporre $base_route ad ogni percorso nella vostra app. Spero che questo ti aiuti.

+0

Sto provando la tua soluzione, ma implica la modifica dell'autenticazione di Laravel, che è dolorosa. –

+1

In realtà non ricordo di dover armeggiare con l'autenticazione. Quali problemi stai incontrando? – ibanjo

+0

Reindirizza prima e dopo l'accesso (per generare token oauth2, ad esempio) invia al percorso sbagliato, perché non riesco a modificare il middleware auth. –