2016-04-21 9 views
5

Also, ich habe eine voll funktionsfähige Laravel 5-Anwendung entwickelt und es auf dem Server meines Kunden, mit Apache2, PHP5 und MySQL. Die App funktioniert wie erwartet und URLs werden korrekt neu geschrieben. Ich muss jetzt einfach meine App auf einen anderen Server klonen, der genau den gleichen Stack ausführt. Problem ist, dass ich meine App in einen Unterordner legen muss, damit auf sie über URLs zugegriffen werden kann, die dem Muster domain2.com/movedApp entsprechen.Move Laravel 5 Anwendung im Server-Unterordner

Mit anderen Worten: Erster Server antwortet auf:

domain1.com/my/routes 

zweiter Server reagieren muss:

domain2/movedApp/my/routes 

ich genau das Virtualhost zu reproduzieren versucht, die auf dem ersten Server arbeitet, Hinzufügen von /movedApp wo erforderlich und Hinzufügen von RewriteBase zu der .htaccess Datei im neuen Ordner public, aber ohne Erfolg.

Ich habe bemerkt, dass Routen von URLs korrekt befolgt wie:

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

Noch bekomme ich 404-Fehler auf Vermögenswerte in log Apache2.

Hiermit melde ich meine .htaccess Datei im Ordner public meiner Arbeit Laravel Anwendung.

.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> 

berichte ich auch die Konfigurationsdatei vom Web-Server verwendet, um meine 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

Haben Sie Erfolg? – urfusion

+0

Ja, habe ich tatsächlich. Ich werde die Details veröffentlichen, sobald ich etwas Freizeit habe. Ich habe das Problem mit nur zwei '.htaccess' Dateien gelöst. – ibanjo

+0

Ich habe eine Antwort auf meine eigene Frage gepostet, damit Sie sie überprüfen können. Vielleicht funktioniert meine Lösung auch für dich. – ibanjo

Antwort

1

zu dienen Also habe ich viel mit VirtualHost (s) herumgespielt, aber die beste Lösung, die ich gefunden habe, betrifft sie überhaupt nicht, und hier ist es.

Das erste, was zu tun ist, .htaccess Dateien für die App Stammordner und seine öffentlichen Ordner zu konfigurieren. fand ich eine einfache Arbeits .htaccess Datei in this answer, die ich hier melden:

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

Der Standard .htaccess funktioniert gut, stattdessen für die public Ordner.

Der letzte Schritt besteht darin, Ihre Routen in routes.php korrekt zu konfigurieren. Die Workaround, die für mich funktioniert, ist ziemlich grob, und vielleicht könnte man eine etwas raffiniertere Lösung finden, aber immer noch hier ist es.

// 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'); 
}); 

Also im Grunde brauchen Sie $base_route zu jeder Route in Ihrer Anwendung vorangestellt wird. Hoffe das hilft.

+0

Ich versuche Ihre Lösung, aber impliziert Laravel Authentifizierung, die schmerzhaft ist. –

+1

Ich kann mich eigentlich nicht daran erinnern, mit der Authentifizierung herumhantieren zu müssen. Auf welche Probleme stoßen Sie? – ibanjo

+0

Redirects vor und nach der Anmeldung (um zum Beispiel ein oauth2-Token zu erzeugen) sende an den falschen Pfad, weil ich die Auth-Middleware nicht bearbeiten kann. –