2016-07-12 19 views
0

Ich habe eine Laravel 4-Setup, die gut funktioniert, wenn ich direkt darauf zugreifen (sagen Sie zum Beispiel, Navigation zu 10.1.1.4 zeigt die Website einfach gut).Set Route root, wenn Anfrage von bestimmten IP

Aber wir haben einen Nginx-Server ausgeführt, der proxy_pass Anfragen an den Server wird. Das Problem dabei ist, dass die proxy_pass nur ausgeführt wird, wenn wir (zum Beispiel) gehen zu 10.1.1.5/ttt, die für die erste Anfrage funktioniert, aber alle Ressourcen/Weiterleitungen werden gebrochen (wegen der fehlenden /ttt bei der Verwendung der URL-Generation von Laravel 4.

Also meine Frage ist sehr einfach Wie kann ich dynamicly die Wurzel, auf die weitergeleitet werden soll, also, wenn Sie die Website direkt zugreifen es so umleitet.?

return Redirect::to('/login'); 

Aber wenn Sie greifen von der Nginx auf es wird umleiten zu:

return Redirect::to('/ttt/login'); 

Ich habe bereits die $_SERVER Variable überprüft, und SERVER_NAME halten die IP des Nginx. Also, da das statisch sein wird, könnte ich überprüfen, ob die SERVER_NAME gleich der nginx IP ist. Das Problem ist, dass ich nicht weiß, was ich weiter machen soll. Soll ich eine globale Variable erstellen, die das "Präfix" enthält oder gibt es eine andere Möglichkeit, das /ttt zu jeder URL-Generation hinzuzufügen?

Antwort

0

Für Menschen mit dem gleichen Problem, hier ist mein schmutziger Hack:

ich zwei definiert in public/index.php

define('REQ_NGINX', ($_SERVER['SERVER_NAME'] == '10.1.1.5'));    // boolean 
define('TTT_URL', 'http://' . $_SERVER['SERVER_NAME'] . (REQ_NGINX?'/ttt':'')); // without leading slash!!! 

Dann wickelte ich die Routen aller in einem Route::group

Route::group(['prefix' => REQ_NGINX ? 'ttt' : ''], function() { 
    Route::get('/',    '[email protected]'); 
    ..... 
}); 
erstellt haben

Das wird die ttt Zeichenfolge vor allen Routen IFvoranstellengleich true

Dann habe ich die Datei Verkäufer/Laravel bearbeitet haben/Rahmen/src/Illuminate/Routing/UrlGenerator.php:
Am Ende des Konstrukteurs, ich diese Zeile hinzugefügt haben:

$this->forceRootUrl(TTT_URL); 

und der letzte Schritt war die .htaccess und fügen Sie die folgenden Zeilen VOR die RewriteCond von index.php

bearbeiten

dass die ttt Teil weg für css, js ... Dateien

ich Antwort hoffen, dass diese selbst wird abzustreifen jemand in der Zukunft helfen wird, das gleiche Problem haben. Ich habe lange an diesem Problem gearbeitet. Wenn Sie jedoch eine bessere/sauberere Lösung gefunden haben, zögern Sie nicht, diese Frage zu beantworten.