2015-05-28 24 views
9

Setup

Próbuję zainstalować laravel 5 aplikację w katalogu na moim serwerze:Install laravel 5 aplikację w podkatalogu z htaccess

public_html/myapp/

I ma to być dostępne w URL:

http://www.example.com/myapp/

Stworzyłem tę regułę .htaccess i umieścić go w myapp folderu w celu przekierowania żądań:

RewriteEngine on 
RewriteRule ^(.*)$ public/$1 [L] 

Problem:

w przeglądarce, gdy próbuję otworzyć aplikację dostaję przekierowany URL jak:

  • http://www.example.com/myapp/public/index.php
  • http://www.example.com/myapp/public/index.php/dashboard

zamiast ładnej ładnej U RLS, takie jak:

  • http://www.example.com/myapp/
  • http://www.example.com/myapp/dashboard

Co muszę zmienić w moim pliku .htaccess, aby uzyskać odpowiednie adresy URL działa?


Update: Aplikacja laravel można przenieść w inne miejsce, jeśli to konieczne, pod warunkiem, pożądanej struktury URL powyżej (z aplikacji dostępnych w example.com/myapp/) może być osiągnięte.

Update: Przy próbie dostępu example.com/myapp/dashboard otrzymuję następujący komunikat o błędzie w przeglądarce: NotFoundHttpException in compiled.php line 7793: ze śladu stosu, który zaczyna się:

in compiled.php line 7793 
at RouteCollection->match(object(Request)) in compiled.php line 7066 
at Router->findRoute(object(Request)) in compiled.php line 7038 
at Router->dispatchToRoute(object(Request)) in compiled.php line 7030 
at Router->dispatch(object(Request)) in compiled.php line 1989 
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) 

Aktualizacja: Poniższy plik .htaccess znajduje się w publicznie Folder:

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

Czy masz również plik htaccess w folderze publicznym? –

+0

Czy instalacja aplikacji w public_html nie powoduje, że wszystkie pliki Laravel są dostępne dla wszystkich? – Mahozi

+0

Hmm, prawdopodobnie tak. Jeśli instaluję poza public_html, jak wskazałbym to na .htaccess? (Przyjmę to jako poprawną odpowiedź, o ile tylko osiągnie strukturę URL, na którą mam nadzieję). –

Odpowiedz

1

można łatwo to osiągnąć przez dodanie dodatkowych .htaccess plik w folderze myapp (będzie przekierowywać wszystkich wniosków w myapp folder do public jak powinien):

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

Należy również zmodyfikować .htaccess w katalogu myapp/public, tak:

<IfModule mod_rewrite.c> 
    Options -MultiViews 
    RewriteEngine On  
    RewriteBase /myapp/ 

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

Zmiana tutaj jest to, że przepisać ścieżkę bazową RewriteBase /myapp/

+0

Wciąż wydaje mi się, że mam ten sam problem. Przepisy działają dla zwykłych plików tekstowych, jednak kiedy próbuję uzyskać dostęp do index.php, otrzymuję przekierowanie zgodnie z pierwotnym opisem. Zaktualizuję oryginalne pytanie z jeszcze jednym komunikatem o błędzie, który zauważyłem w przypadku, który pomaga zorientować się, co się dzieje. –

+0

Proszę usunąć plik '.htaccess' z folderu publicznego i umieścić moje, które zasugerowałem. – shaddy

+0

Wymieniłem plik 'myapp/public/.htaccess' na dostarczony, a także zastąpiłem" myapp "nazwą folderu aplikacji. Również wyczyściłem pamięć podręczną przeglądarki, aby się upewnić. Ten sam problem przekierowania. Zasady przepisywania, które podałeś, dobrze mi odpowiadają, więc może jest coś innego, co dzieje się z trasami w aplikacji?Nie jestem do końca pewny. –

4

Co można zrobić, to użyć dowiązania symbolicznego .

  1. Umieść laravel app gdzie indziej (poza folderze public_html)
  2. Tworzenie dowiązania folderu publicznego swojej aplikacji w folderze public_html

    cd/ścieżka/do/pliku/public_html

    sudo ln -s/ścieżka/do/pliku/laravel_app/myapp publicznego

Możesz przeczytać więcej o dowiązaniach symbolicznych here.

+1

Genialny pomysł i rozwiązanie. Kuddos !!!! – zmonteca

+0

@ ben-cole, czy mógłbyś zaakceptować moją odpowiedź, gdyby działała dla ciebie? – atefth

0

Przykład ten powinien pracować dla następujących przypadkach:

Wykonaj następujące kroki:

  1. Przenieś wszystko z myapp/public folder do myapp/ folderu
  2. Otwarte MojaApl/index.php i aktualizacji bootstrap ścieżki do wymagają __DIR __. '/ Bootstrap/
  3. Otwarte .env i aktualizacja do podstawowego adresu URL, takich jak: APP_URL = http://example.com/myapp
  4. ścieżki Aktualizuj we wszystkich widokach i układ (również w kodzie, jeśli masz jakiekolwiek) używać bazowy adres URL, na przykład: src = "{{URL :: do ('/ js/app.js')}}"

To zawsze zalecane do osobnego folderu publicznego z resztą aplikacji. Możesz dodać trochę ochrony do folderów Laravel, dodając do nich pliki .htaccess, które będą zawierać "Deny ze wszystkich".