Wiem, że jest to bardzo popularne pytanie, ale nie udało mi się znaleźć działającego rozwiązania dla Laravela 5. Od dłuższego czasu próbowałem przeprowadzić migrację z Codeigniter, ale ten skomplikowany proces instalacji mnie zniechęca.
Nie chcę uruchamiać maszyny wirtualnej, wydaje się to po prostu niewygodne podczas przełączania między projektami.
Nie chcę ustawiać katalogu głównego dokumentu na folder publiczny, jest to również niewygodne przy przełączaniu między projektami.
Wypróbowałem metodę mod_rewrite .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
To po prostu daje mi wyjątek Laravel NotFoundHttpException w linii compiled.php 7610.
Kiedy próbowałem L4 jakiś czas temu, użyłem metody przeniesienia zawartości folderu publicznego do katalogu głównego. Struktura L5 jest zupełnie inna i wykonanie tych samych kroków całkowicie złamało Laravela (serwer zwróciłby tylko pustą stronę).
Czy istnieje przyzwoita metoda usuwania „publicznych” w środowisku programistycznym, która:
- Działa z L5
- Pozwala mi z łatwością przełączać się między projektami (zwykle pracuję nad 2 lub 3 jednocześnie).
Dzięki
** Używam MAMP i PHP 5.6.2
Odpowiedzi:
W przypadku Laravel 5:
server.php
w folderze głównym Laravel naindex.php
.htaccess
plik z/public
katalogu do folderu głównego Laravel.Otóż to!
źródło
.env
plik, jeśli to robisz, chyba że jesteś w porządku z osobami przeglądającymi hasło do bazy danych jawnym tekstem;)<Files "log.txt">Order Allow,DenyDeny from all</Files>
rozwiązuje problem, który rozwiązałeś. Czy teraz jest to bezpieczne, czy może istnieje ryzyko?log.txt
. Tylko upewnij się, że blokujesz poufne dane od społeczeństwa. Jeśli użyjesz Laravela i dokładnie zapoznasz się z dokumentacją , będzie wyglądał twój webrootproject/public
. Zajrzyj do tej qa dyskusji o przepływie stosów . Skonfiguruj swój serwer internetowy i spróbuj nahttps://example.com/.env
wszelki wypadek. Jeśli zobaczysz swoje hasła, zastanów się, czy wszystko zostało naruszone i zmień wszystkie hasła.Rozwiązałem problem, używając 2 odpowiedzi:
Zmiana .htaccess to trochę w następujący sposób dla statyki:
Jeśli są jakieś inne pliki statyczne , po prostu dodaj rozszerzenie do poprzednio zadeklarowanej listy
źródło
RewriteRule ^.env - [F,L,NC]
<Files ~ "\.env$"> Order allow,deny Deny from all </Files>
W Laravel 5.5 utwórz plik .htacess w swoim katalogu głównym i umieść następujący kod: - Link referencyjny
źródło
RewriteRule ^ ^$1 [N
]?NIE!
NAPRAWDĘ NIE NALEŻY zmieniać nazwy
server.php
folderu głównego Laravelindex.php
i kopiować.htaccess
go z/public
katalogu do folderu głównego Laravel !!!W ten sposób każdy może uzyskać dostęp do niektórych plików (
.env
na przykład). Spróbuj sam. Nie chcesz tego!ROBIĆ
Zamiast tego powinieneś utworzyć
.htaccess
plik w swoim katalogu głównym w następujący sposób:Spowoduje to dyskretne przepisanie wszystkich podstawowych identyfikatorów URI do
/public
folderu. Nawet wszystkie nagłówki , na przykład nagłówek autoryzacji HTTP i wszystkie opcjonalne parametry identyfikatora URI zostaną po cichu przekazane również do/public
folderu.To wszystko
Podczas konfigurowania projektu Laravel za pomocą Dockera pamiętaj: nie musisz tego robić.
źródło
Łatwy sposób na usunięcie publicznych z adresu laravel 5. Wystarczy wyciąć plik index.php i .htaccess z katalogu publicznego i wkleić go do katalogu głównego, to wszystko i zastąpić dwie linie w pliku index.php jako
Uwaga : powyższa metoda jest przeznaczona tylko dla początkujących, ponieważ mogą mieć problem z konfiguracją wirtualnego hosta. Najlepszym rozwiązaniem jest skonfigurowanie wirtualnego hosta na lokalnej maszynie i skierowanie go do katalogu publicznego projektu.
źródło
@ rimon.ekjon powiedział:
To działa dla mnie. Ale wszystkie pliki zasobów w katalogu / public nie mogły znaleźć i adresy URL żądań nie działały, ponieważ użyłem pomocnika asset ().
Zmieniłem funkcję /Illuminate/Foundation/helpers.php/asset () w następujący sposób:
Teraz wszystko działa :)
Dziękuję @ rimon.ekjon i wam wszystkim.
źródło
RewriteRule ^(.*)$ public/$1 [L]
plik .htaccess, który skopiowałeś z katalogu publicznego, usuwając ten wierszRewriteRule ^(.*)/$ /$1 [L,R=301]
Po prostu utwórz plik .htaccess w katalogu głównym i dodaj do niego te linie
Otóż to!
Powyższy kod działa w głównym folderze public_html. Powiedziawszy, że twój podstawowy plik laravel powinien znajdować się w folderze public_html, jeśli twój katalog wygląda jak public_html / laravelapp / public i jeśli umieścisz powyższy kod w laravelapp, to nie będzie działać. Dlatego musisz skopiować wszystkie swoje podstawowe pliki do public_html i tam umieścić plik .htaccess.
Jeśli chcesz zachować kod w podkatalogu, możesz utworzyć subdomenę, ten kod również będzie działał.
źródło
Utwórz
.htaccess
plik w katalogu głównym i umieść kod podobny do poniższego.źródło
1) Nie znalazłem działającej metody przenoszenia katalogu publicznego w L5 . Podczas gdy możesz modyfikować niektóre rzeczy w bootstrap
index.php
, wydaje się, że kilka funkcji pomocniczych opiera się na założeniu, że jest tam katalog publiczny. Szczerze mówiąc, naprawdę nie powinieneś przenosić katalogu publicznego.2) Jeśli korzystasz z MAMP , powinieneś tworzyć nowe vhosty dla każdego projektu, każdy obsługujący ten katalog publiczny. Po utworzeniu uzyskujesz dostęp do każdego projektu przez zdefiniowaną nazwę serwera w następujący sposób:
źródło
Możliwe jest usunięcie publiczne adresu URL w laravel5. Wykonaj następujące kroki:
krok 1. skopiuj cały plik z publicznego i wklej do katalogu głównego
krok 2. otwórz
index.php
plik zamień nado
i
do
I usuń całą pamięć podręczną i pliki cookie.
źródło
Załóżmy, że umieściłeś wszystkie pozostałe pliki i katalogi w folderze o nazwie „locale”.
Po prostu przejdź do index.php i znajdź te dwie linie:
i zmień je na:
źródło
Oto najlepsze i najkrótsze rozwiązanie, które działa dla mnie od maja, 2018 dla Laravel 5.5
po prostu wytnij
.htaccess
plik z katalogu / public do katalogu głównego i zastąp go zawartością następującym kodem:Po prostu zapisz
.htaccess
plik i to wszystko.Zmień nazwę
server.php
pliku naindex.php
. to wszystko cieszy!źródło
Najlepszym rozwiązaniem: Nie polecam usuwania opinii publicznej, zamiast
on local computer create a virtual host point to public directory
ion remote hosting change public to public_html and point your domain to this directory
. Powód, cały twój kod laravel będzie bezpieczny, ponieważ jest o jeden poziom niższy od twojego katalogu publicznego :)METODA 1:
Po prostu zmieniam nazwę
server.php
naindex.php
i to działaMETODA 2:
Działa to dobrze dla wszystkich wersji laravel ...
Oto moja struktura katalogów,
Wykonaj te proste kroki
do
i
do
do
i to wszystko, teraz spróbuj http: // localhost / laravel /
źródło
4 najlepsze sposoby na usunięcie publicznych z adresu URL.
Jeśli użyłeś innej sztuczki, aby usunąć publiczność z adresu URL, np. Zmień nazwę server.php na index.php i zmień ścieżkę do pliku podstawowego. Oczywiście nie rób tego. To dlaczego Laravel nie podaje takiego rozwiązania, ponieważ nie jest to właściwy sposób na zrobienie tego.
Dodając plik .htaccess do katalogu głównego, możesz uzyskać dostęp do strony internetowej bez publicznego
Daję tutaj wersję demonstracyjną systemu operacyjnego Windows. Spróbuję jednak zdefiniować krok, aby każdy mógł łatwo go wykonać. Możesz także poszukać w google tego samego dla konkretnego systemu operacyjnego.
Krok 1: Przejdź do C: \ Windows \ system32 \ drivers \ etc \ otwórz plik „hosts” w trybie administratora.
Krok 2: Dodaj do niego następujący kod. Tutaj daję ci demo projektu nazwa domeny. Lokalna demonstracja nazwy domeny, możesz określić dowolne, jak chcesz. Po prostu zrób to w każdym miejscu.
Krok 3: Teraz przejdź do,
C:\xampp\apache\conf\extra
dla użytkowników Xampp i dla użytkownika Wamp"C:\wamp\bin\apache\Apache2.4.4\conf\extra"
i otwórz"httpd-vhosts.conf"
plik. Teraz dodaj do niego następujący kod.Uwagi: Zmień katalog główny dokumentu zgodnie z projektem, a także dodaj nazwę domeny, jak zdefiniujesz, do pliku „hosts”.
Krok 4: Ostatnim, ale ważnym krokiem jest zrestartowanie Xamppa lub Wampa i dostęp do
http://projectname.local
adresu URL jak, a Laravel odpowie bez publicznego adresu URL.Jeśli pracujesz w trybie lokalnym, nie musisz nic robić, wystarczy uruchomić następujące polecenie z poziomu terminala lub narzędzia wiersza poleceń. Następnie możesz uzyskać dostęp do swojej witryny, podając adres URL z wiersza polecenia.
Jeśli chcesz uruchomić projekt w określonym adresie IP, musisz uruchomić następujące polecenie. Jeśli pracujesz w sieci LAN, jeśli chcesz zezwolić innym osobom na dostęp do Twojej witryny z lokalnego, musisz po prostu sprawdzić swój adres IP za pomocą wiersza polecenia, uruchamiając polecenie „ipconfig” po uruchomieniu adresu IP po wykonaniu polecenia.
Jeśli chcesz uruchomić projekt na określonym adresie IP z określonym portem, musisz wykonać następujące polecenie.
Po zakończeniu projektu musisz hostować projekt na serwerze, a następnie wystarczy ustawić katalog główny dokumentu w domenie na folder publiczny. Sprawdź poniższy zrzut ekranu.
Zgodnie ze zrzutem ekranu, jeśli nie masz żadnego folderu projektu w public_html, wystarczy ustawić katalog główny dokumentu jak
"public_html/public"
.Referencje zaczerpnięte stąd
źródło
Chciałbym dodać do @Humble Learner i zauważyć, że poprawną lokalizacją do „naprawy” ścieżki URL dla zasobów jest /Illuminate/Routing/UrlGenerator.php/asset ().
Zaktualizuj metodę, aby pasowała:
To naprawi skrypty, style i ścieżki obrazu. Wszystko dla ścieżek zasobów.
źródło
Aby użytkownik XAMPP mógł usunąć adres publiczny z adresu URL bez dotykania domyślnego systemu plików laravel, należy ustawić wirtualny host dla aplikacji, aby to zrobić, wykonaj następujące kroki
Otwórz aplikację panelu sterowania XAMPP i zatrzymaj Apache. Pamiętaj, że późne komputery z systemem Windows mogą uruchamiać go jako usługę, więc zaznacz pole po lewej stronie modułu Apache.
Przejdź do
C:/xampp/apache/conf/extra
lub gdziekolwiek się znajdują twoje pliki XAMPP.Otwórz plik o nazwie httpd-vhosts.conf w edytorze tekstu.
Wokół linii 19 znajdź #
NameVirtualHost *:80
i usuń komentarz lub usuń skrót.Na samym dole pliku wklej następujący kod:
C:/Windows/System32/drivers/etc/hosts
, gdzie host jest plikiem. Otwórz za pomocą notatnika.127.0.0.1 localhost
Rozpoznawanie nazw localhost jest obsługiwane w samym DNS.
Oryginalny artykuł można znaleźć tutaj
źródło
Zawsze jest powód, aby mieć folder publiczny w konfiguracji Laravel, wszystkie powiązane z nim rzeczy powinny znajdować się w folderze publicznym,
Po prostu napisz warunek przepisania do
.htaccess
pliku i zainstaluj moduł przepisywania i włącz moduł przepisywania, problem dodawania publicznych do trasy zostanie rozwiązany.źródło
Wiem, że istnieje wiele rozwiązań tego problemu. Najlepszym i najłatwiejszym rozwiązaniem jest dodanie pliku .htaccess do katalogu głównego .
Próbowałem odpowiedzi, które podaliśmy dla tego problemu, ale napotkałem pewne problemy z auth: api guard w Laravel.
Oto zaktualizowane rozwiązanie:
Utwórz plik .htaccess w katalogu głównym i dodaj ten kod. I wszystko idzie dobrze
źródło
Laravel 5.5
Po zainstalowaniu Laravela po raz pierwszy napotkałem znany problem „folderu publicznego” i wymyśliłem to rozwiązanie, które moim zdaniem jest „czystsze” niż inne, które znalazłem w sieci.
Osiągnięcia
public
słowa w URI.env
plik przed ciekawskimi ludźmiWszystko można zrobić, edytując
.htaccess
użyciemod_rewrite
i cztery proste reguły.Kroki
.htaccess
plik dopublic/.htaccess
do głównego katalogu głównegoSkomentowałem wszystko, więc powinno być jasne (mam nadzieję) także dla tych, którzy nigdy nie korzystali
mod_rewrite
(wręcz przeciwnie, nie jestem ekspertem). Aby zrozumieć zasady, musi być jasne, że w Laravel, jeśli Bill się łączyhttps://example.com
,https://example.com/index.php
jest załadowany. Ten plik zawiera tylko polecenieheader("refresh: 5; https://example.com/public/")
, które wysyła żądanie dohttps://example.com/public/index.php
. Ta sekundaindex.php
odpowiada za załadowanie kontrolera i innych rzeczy.Następującą regułę (pierwotnie w
public/.htaccess
) można usunąć. Ta sama zasada została wyjaśniona bardziej szczegółowo w dwóch ostatnich regułach.EDIT: Tęskniłem Abhinav Saraswat rozwiązanie „s , a jego odpowiedź powinna być przyjętym jeden. Tylko jedna, prosta i jasna reguła, która przekierowuje cały ruch do folderu publicznego bez modyfikowania żadnego pliku.
źródło
Po pierwsze możesz skorzystać z tych kroków
źródło: https://stackoverflow.com/a/28735930
po wykonaniu tych kroków musisz zmienić wszystkie ścieżki css i skryptów, ale będzie to męczące.
Propozycja rozwiązania : wystarczy dokonać niewielkiej zmiany
helpers::asset
funkcji.W tym celu :
otwarty
vendor\laravel\framework\src\Illuminate\Foundation\helpers.php
mam linię 130
pisz
"public/".$path
zamiast$path
,źródło
Aktywuj moduł mod_rewrite za pomocą
i uruchom ponownie apache
Aby użyć mod_rewrite z plików .htaccess (co jest bardzo częstym przypadkiem użycia), edytuj domyślny VirtualHost za pomocą
Pod „DocumentRoot / var / www / html” dodaj następujące wiersze:
Uruchom ponownie serwer:
źródło
Przeczytałem już jakiś artykuł i działa dobrze, ale naprawdę nie wiem, czy jest bezpieczny, czy nie
Edytuj plik index.php
do
źródło
Nawet jeśli nie zalecam umieszczania Laravela w folderze głównym, są przypadki, których nie da się uniknąć; dla tych przypadków powyższe metody nie działają dla zasobów, więc zrobiłem szybką poprawkę zmieniając htaccess: po skopiowaniu server.php do index.php edytuj plik .htaccess w następujący sposób:
To była szybka poprawka, którą musiałem wprowadzić, aby każdy mógł ją uaktualnić.
źródło
Problemem jest, jeśli wpiszesz / public i nadal będzie dostępny w adresie URL, dlatego stworzyłem poprawkę, która powinna zostać umieszczona w public / index.php
ten spokój kodu usunie publiczność z adresu URL i da 404, a następnie przekieruje do adresu bez publicznego
źródło
Inną metodą, której używam, jest utworzenie dowiązania symbolicznego (w Linuksie, nie wiem o Win) za pomocą polecenia ln w htdocs lub www, tj
ln projectname/public project
. Strona jest więc dostępna przez localhost / projectźródło
Możesz usunąć publiczne słowo kluczowe z adresu URL za pomocą różnych metod.
1) Jeśli korzystasz z hostingu dedykowanego i masz dostęp do konta root, możesz usunąć publiczne słowo kluczowe z adresu URL za pomocą wirtualnego hosta. Powinieneś podać ścieżkę DocumentRoot publicznie. Spowoduje to uruchomienie indeksu z katalogu publicznego i usunięcie go z adresu URL.
2) Jeśli nie masz dostępu do roota swojego hostingu, powinieneś wygenerować nowy plik .htaccess w swoim katalogu głównym i umieścić kod jak poniżej
Możesz uzyskać więcej informacji tutaj.
źródło
Utwórz plik .htaccess w katalogu głównym i umieść kod podobny do poniższego.
Utwórz plik .htaccess w katalogu / public i umieść kod podobny do poniższego.
źródło
Znalazłem najbardziej działające rozwiązanie tego problemu.
Po prostu edytuj swój
.htaccess
w folderze głównym i napisz następujący kod. Nic więcej nie jest wymaganeźródło
wypróbowałem tutaj jakieś rozwiązanie i znalazłem htaccess, który działa dla laravel 5.2, w ten sposób:
gdy masz inny plik lub folder do zabronienia, po prostu dodaj
źródło
Nie musisz wiele robić, po prostu utwórz plik .htaccess w katalogu głównym i wklej / zapisz poniżej;
źródło