2016-06-09 13 views
2

Wie kann ich http://domain.com/public/index.php zu http://domain.com ändern und kann die anderen Routen arbeiten als ('/')?Laravel 5.2 Pretty URLs

Problemumgehung 1:

vhost-Datei:

<VirtualHost *:80> 
    DocumentRoot "/var/www/html/domain/public" 
    ServerName domain.com 
    <Directory "/var/www/html/domain/public"> 
     AllowOverride All 
     Allow from All 
    </Directory> 

    ErrorLog ${APACHE_LOG_DIR}/error.log 
    CustomLog ${APACHE_LOG_DIR}/access.log combined 
</VirtualHost> 

.htaccess-Datei:

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

Mit diesem Aufbau, ja, ich bin in der Lage http://domain.com einstellen aber wenn ich versuche g, um eine andere Route aufzurufen und einen 404 zu erhalten. Der Grund dafür ist, dass Sie meinen Stammordner als öffentlich festgelegt haben. So können meine Routen ihre Ziele nicht erreichen (wie diejenigen, die an meine Controller geleitet werden, weil sich meine Controller nicht im öffentlichen Ordner befinden).

Abhilfemaßnahme 2:
Wenn i Document root und Verzeichnis in /var/www/html/domain/ dieses Mal, wenn ich meine ziemlich url bin zu verlieren und nur so ändern kann ich von Haupt-Seite anfordern http://domain.com/public/index.php eingeben.

Beachten Sie, dass ich Ubuntu 14.04 verwende.

Was schlagen Sie vor?

--- --- Update
Routen Beispiel:

Route::get('myroute', array(
    'uses' => '[email protected]', 
    'as' => 'myroute' 
)); 

--- Update 2 --- php Handwerkers Route: Liste Ergebnisse sind

+--------+----------+---------+------+---------+------------+ 
| Domain | Method | URI  | Name | Action | Middleware | 
+--------+----------+---------+------+---------+------------+ 
|  | GET|HEAD |/  |  | Closure | web  | 
|  | GET|HEAD | myroute |  | Closure | web  | 
+--------+----------+---------+------+---------+------------+ 
+0

Ihr virtueller Host ** sollte ** auf den öffentlichen Ordner zeigen, es gibt keine Umgehungslösungen und Tricks, er sollte genauso funktionieren wie er ist. Können wir sehen, wie Sie Ihre Routen definieren, die Sie 404 erhalten? – TheFallen

+0

Die virtuelle Hosts-Lösung sollte gut funktionieren. Aus Ihrer Beschreibung geht hervor, dass Sie kein Verständnis dafür haben, wie der Laravel funktioniert. Der Einstiegspunkt wird immer 'index.php' sein, selbst wenn wir virtualhost auf das öffentliche Verzeichnis verweisen, erreichen alle Anfragen die Datei' index.php', die dann die Anfrage bootstrappt und die Anfrage wie gewünscht weiterleitet. Alle Routen sollten gut funktionieren. – saji89

+0

@TheFallen Ich habe den Beitrag aktualisiert. –

Antwort

0

Ja, jede dieser Antworten funktioniert gut, aber vorher habe ich herausgefunden, Apache Rewrite-Modul mod_rewrite sollte bereits aktiviert worden sein.

Auf Ubuntu-Konsole: a2enmod rewrite löste meine Situation.

3

Sie müssen Richten Sie den virtuellen Host korrekt in der Konfigurationsdatei Ihres Webservers ein. Set public directory as root directory for Laravel VH and restart web server.

Für Apache können Sie diese Richtlinien verwenden:

DocumentRoot "/path_to_aravel_project/public" 
<Directory "/path_to_aravel_project/public"> 

Für nginx, sollten Sie diese Zeile:

root /path_to_aravel_project/public; 
+0

danke, aber meine Konfiguration wurde bereits so eingestellt. Ich kann meine Routen nicht erreichen, wenn ich config so einstelle. –

+0

Bitte zeigen Sie mir die URL, die Sie versuchen, die Ausgabe von 'php artisan route: list' zu verwenden. Haben Sie auch '.htaccess' oder' index.php' bearbeitet? –

+0

Ich habe den Beitrag aktualisiert. Nein, ich habe übrigens .htaccess oder index.php nicht geändert. –

2

Dies ist, wie ich mit diesem in meinen Projekten beschäftigen. Es gibt zwei Schritte.

1.Erstellen eine neue .htaccess-Datei in Ihrem/public-Verzeichnis mit folgendem Inhalt:

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

RewriteEngine On 

# Redirect Trailing Slashes If Not A Folder... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

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

2. gibt es eine Datei server.php in Ihrem Projekt root genannt .. (Elternteil App, öffentlich usw.).

Umbenennungs die

index.php Und es sollte ohne jede Hektik .. arbeiten.

+0

Es tut mir leid, aber das funktioniert nicht wirklich. –

+0

funktioniert für mich die ganze Zeit .. können Sie bitte die Änderungen teilen, die Sie danach beobachten? Oder es gibt überhaupt keine Veränderung. –