Laravel 5-Usuń publiczny z adresu URL
Wiem, że to bardzo popularne pytanie, ale nie udało mi się znaleźć działającego rozwiązania dla Laravel 5. Od dłuższego czasu próbuję przeprowadzić migrację z Codeigniter, ale ten zawiły proces instalacji wciąż mnie zniechęca.
Nie chcę uruchamiać maszyny wirtualnej, to po prostu wydaje się niezręczne podczas przełączania między projektami.
Nie chcę ustawiać katalogu głównego dokumentu na folderze publicznym, jest to również niezręczne podczas przełączania między projektami.
Próbowałem .metoda htaccess mod_rewrite
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
To po prostu daje mi Laravel NotFoundHttpException w skompilowanym.php line 7610
Kiedy jakiś czas temu próbowałem L4, użyłem metody przenoszenia zawartości folderu publicznego do katalogu głównego. Struktura L5 jest zupełnie inna i po tych samych krokach całkowicie złamał Laravel (serwer zwróci tylko pustą stronę).
Czy istnieje przyzwoita metoda usuwania 'public' w środowisku deweloperskim, które:
- Działa z L5
- pozwala mi łatwo przełączać się między projektami (Zwykle pracuję na 2 lub 3 w tym samym czasie).
Thanks
** używam MAMP i PHP 5.6.2
30 answers
Dla Laravel 5:
- Zmień nazwę
server.php
w głównym folderze Laravel naindex.php
- skopiuj plik
.htaccess
z katalogu/public
do katalogu głównego Laravel folder.
To jest to!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-20 12:22:12
NIE!
Naprawdę nie powinieneś zmieniać nazwy server.php
w folderze głównym Laravel na index.php
i skopiuj plik .htaccess
z katalogu /public
do folderu głównego Laravel!!!
W ten sposób każdy może uzyskać dostęp do niektórych plików (na przykład.env
). Spróbuj sam. Nie chcesz tego!
DO
Zamiast tego powinieneś utworzyć .htaccess
plik w katalogu głównym w następujący sposób:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L,QSA]
To po cichu przepisze wszystkie Twoje podstawowe Uri do folderu /public
. Parzyste wszystkie nagłówki , na przykład nagłówek autoryzacji HTTP oraz wszystkie opcjonalne parametry URI zostaną również po cichu przekazane do folderu /public
.
To wszystko
Uwaga podczas konfigurowania projektu Laravel za pomocą Dockera: nie musisz tego robić.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-27 07:48:55
Rozwiązałem problem używając 2 Odpowiedzi:
- zmiana nazwy serwera.php do indeksu.php (bez modyfikacji)
- skopiuj .htaccess z folderu publicznego do folderu głównego (jak rimon.ekjon said below)
-
Zmiana .htaccess to trochę w następujący sposób dla statyki:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301] RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !^/public/ RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]
Jeśli są potrzebne inne pliki statyczne wystarczy dodać rozszerzenie do poprzedniej zadeklarowanej listy
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-16 20:13:08
In Laravel 5.5 create .plik htacess w katalogu głównym i umieścił następujący kod: - Reference Link
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
</IfModule>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-29 04:11:53
Łatwy sposób na usunięcie publicznego adresu URL z laravel 5. Musisz tylko obciąć indeks.php i .htaccess z katalogu publicznego i wklej go do katalogu głównego, to wszystko i zastąp dwie linie w indeksie.php as
require __DIR__.'/bootstrap/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';
Uwaga: powyższa metoda jest tylko dla początkujących, ponieważ mogą mieć problem z konfiguracją wirtualnego hosta, a najlepszym rozwiązaniem jest skonfigurowanie wirtualnego hosta na komputerze lokalnym i skierowanie go do publicznego katalogu projektu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-22 17:19:21
@Rimon.ekjon powiedział:
To mi pasuje. Ale wszystkie pliki zasobów w katalogu / public nie mogły znaleźć i żądania adresów URL nie działały, ponieważ użyłem asset () helper.Zmień nazwę serwera.php w katalogu głównym Laravel do indeksowania.php i skopiuj .plik htaccess z katalogu / public do folderu głównego Laravel. -- To wszystko !! :)
Zmieniłem / Oświetliłem / Fundację / pomocników.funkcja php / asset () wygląda następująco:
function asset($path, $secure = null)
{
return app('url')->asset("public/".$path, $secure);
}
Teraz wszystko działa :)
Dziękuję @rimon.ekjon i wy wszyscy.
2020 aktualizacja autora
Ta odpowiedź nie jest zalecana.
Zamiast tego zaleca się obsługę pliku .htaccess
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-28 07:53:24
Utwórz plik .htaccess
w katalogu root i umieść kod podobny do poniższego.
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
</IfModule>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-23 11:25:33
Wystarczy utworzyć .htaccess plik w katalogu głównym i dodaj do niego te linie
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
To jest to!
Powyższy kod działa na głównym folderze public_html. Mówiąc, ż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 zadziała. Dlatego musisz skopiować wszystkie swoje podstawowe pliki do public_html i umieścić .plik htaccess .
Jeśli chcesz keep the code in a subdirectory then you can create a subdomain then this code will work for that also.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-03 06:20:42
1) nie znalazłem metody roboczej do przenoszenia katalogu publicznego w L5 . Chociaż można modyfikować niektóre rzeczy w bootstrap index.php
, wygląda na to, że kilka funkcji pomocniczych opiera się na założeniu, że znajduje się tam katalog publiczny. Szczerze mówiąc, nie powinieneś przenosić publicznego katalogu.
2) Jeśli używasz MAMP , powinieneś tworzyć nowe vhosty dla każdego projektu, każdego obsługującego publiczny katalog projektów. Po utworzeniu masz dostęp do każdego projekt po zdefiniowanej nazwie serwera w ten sposób:
http://project1.dev
http://project2.dev
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-28 19:51:49
Możliwe jest usunięcie publicznego adresu url w laravel5. Wykonaj następujące kroki:
Krok 1.skopiuj cały plik z public i wklej do root katalog
Krok 2.otwórz plik index.php
zastąp przez
require __DIR__.'/../bootstrap/autoload.php';
Do
require __DIR__.'/bootstrap/autoload.php';
I
$app = require_once __DIR__.'/../bootstrap/app.php';
Do
$app = require_once __DIR__.'/bootstrap/app.php';
I usunąć wszystkie cache i pliki cookie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-28 19:54:02
4 najlepsze sposoby, aby usunąć publiczne z adresu URL.
Jeśli użyłeś innej sztuczki, aby usunąć publiczne z adresu URL, takiej jak zmiana nazwy serwera.php do indeksu.php i przejście do ścieżki pliku core. Najwyraźniej, nie rób tego. To dlaczego Laravel nie podaje takiego rozwiązania, bo to nie jest właściwy sposób.
1) Usuń publiczny z adresu URL za pomocą htaccess w Laravel
Przez dodanie a .plik htaccess do katalogu głównego, można uzyskać dostęp do strona internetowa bez publicznych
<ifmodule mod_rewrite.c>
<ifmodule mod_negotiation.c>
Options -MultiViews
</ifmodule>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
</ifmodule>
2) Usuń publiczne, tworząc wirtualny host w lokalnym
Podaję tutaj demo systemu operacyjnego Windows. Ale postaram się zdefiniować krok, aby każdy mógł łatwo wykonać krok. Możesz również badać w google dla tego samego dla danego systemu operacyjnego.
Krok 1: przejdź do C:\Windows\system32\drivers\etc \ otwórz plik "hosts" w administratorze mode.
Krok 2: Dodaj do niego następujący kod. Tutaj, daję ci demo nazwy projektu.lokalna nazwa domeny demo, możesz określić dowolny, jak chcesz. Spraw, by była stała w każdym miejscu.
127.0.0.1 projectname.local
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 plik "httpd-vhosts.conf"
. Teraz dodaj do niego następujący kod.
Przypisy: Zmień główny dokument zgodnie z projektem Dodaj również nazwę domeny, jak zdefiniujesz w plik "hosts".
<VirtualHost projectname.local>
ServerAdmin projectname.local
DocumentRoot "C:/xampp/htdocs/projectdir"
ServerName projectname.local
ErrorLog "logs/projectname.local.log"
CustomLog "logs/projectname.local.log" common
</VirtualHost>
Krok 4: ostatnim, ale ważnym krokiem jest ponowne uruchomienie Xampp lub Wamp i dostęp do adresu URL, jak http://projectname.local
a Twój Laravel odpowie bez publicznego adresu URL.
3) Usuń publiczne, uruchamiając komendę w Laravel
Jeśli pracujesz w trybie lokalnym, nie musisz nic robić, wystarczy uruchomić następujące polecenie z terminala lub narzędzia wiersza poleceń. Następnie możesz uzyskać dostęp do swojej witryny przez podany adres URL w wierszu poleceń.
> php artisan serve
Jeśli chcesz uruchomić swój projekt na danym 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, wystarczy sprawdzić swój adres IP za pomocą wiersza poleceń, uruchamiając "ipconfig" po uruchomieniu adresu IP zgodnie z poleceniem.
> php artisan serve --host=192.168.0.177
Jeśli chcesz uruchomić swój projekt na określonym IP z określonym portem, to potrzebujesz następującej komendy.
> php artisan serve --host=192.168.0.177 --port=77
4) Usuń publiczne na serwerze hostowanym lub na cpanel
Po zakończeniu projektu musisz hostować projekt na serwerze, następnie wystarczy ustawić root dokumentu w swojej domenie do folderu publicznego. Sprawdź poniższy zrzut ekranu.
Jak na screenie jeśli nie masz żadnego folderu projektu w public_html to wystarczy ustawić swój root dokumentu jak "public_html/public"
.
Odniesienie zaczerpnięte z tutaj
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-05 08:30:10
Oto najlepsze i najkrótsze rozwiązanie, które działa dla mnie od maj, 2018 dla Laravel 5.5
-
Po prostu Wytnij plik
.htaccess
z katalogu / public do katalogu root i zastąp jego zawartość następującym kodem:<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews </IfModule> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301] RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ server.php [L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !^/public/ RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC] </IfModule>
Po prostu zapisz plik
.htaccess
i to wszystko.Zmień nazwę pliku
server.php
naindex.php
. to wszystko enjoy!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-23 11:15:29
Załóżmy, że umieściłeś wszystkie inne pliki i katalogi w folderze o nazwie 'locale'.
Po prostu przejdź do indeksu.php i znajdź te dwie linie:
require __DIR__.'/../bootstrap/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
I zmień je na to:
require __DIR__.'/locale/bootstrap/autoload.php';
$app = require_once __DIR__.'/locale/bootstrap/app.php';
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-19 17:26:17
Najlepsze podejście:
Nie polecam usuwania public, zamiast on local computer create a virtual host point to public directory
i on remote hosting change public to public_html and point your domain to this directory
. Powód, cały kod laravel będzie bezpieczny, ponieważ jego jeden poziom w dół do katalogu publicznego:)
Metoda 1:
Zmieniam nazwę server.php
na index.php
i działa
Metoda 2:
To działa dobrze dla wszystkich wersji laravel...
Oto moja struktura katalogów,
/laravel/
... app
... bootstrap
... public
... etc
Wykonaj te proste kroki]}
- Przenieś wszystkie pliki z katalogu publicznego do root / laravel /
- teraz, nie ma potrzeby publicznego katalogu, więc opcjonalnie możesz go teraz usunąć
- teraz otwórz indeks.php i wykonaj następujące zamienniki
Require DIR .'/../bootstrap / autoload.php";
Do
Require DIR ."/bootstrap / autoload.php";
I
$app = require_once DIR .'/../start.php";
Do
$app = require_once DIR .'/bootstrap / start.php";
- teraz otwórz bootstrap / paths.php i zmiana ścieżki katalogu publicznego:
'public' = >DIR .'/../ public",
Do
'public' = >DIR .'/..',
I to wszystko, teraz spróbuj http: / / localhost / laravel /
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-15 05:52:54
Chciałbym dodać do @Humble Learner I zauważyć, że właściwą lokalizacją do "naprawy" ścieżki url dla zasobów jest / Illuminate/Routing / UrlGenerator.php/asset ().
Update the method to match:
public function asset($path, $secure = null)
{
if ($this->isValidUrl($path)) return $path;
$root = $this->getRootUrl($this->getScheme($secure));
return $this->removeIndex($root).'/public/'.trim($path, '/');
}
To naprawi Skrypty, style i ścieżki obrazów. Wszystko na cele majątkowe.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-02 03:10:56
Dla użytkownika XAMPP, aby usunąć publiczny z adresu url bez dotykania Laravel domyślnym systemem plików jest ustawienie wirtualnego hosta dla aplikacji, aby to zrobić jsut wykonaj następujące kroki
Otwórz aplikację XAMPP control panel i zatrzymaj Apache. Należy pamiętać, że późne maszyny 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 znajdują się Twoje pliki XAMPP.Otwórz plik o nazwie httpd-vhosts.conf z edytorem tekstu.
Wokół linii 19 znajdź #
NameVirtualHost *:80
i odkomentuj lub usuń hash.-
Na samym dole pliku wklej następujący kod:
<VirtualHost *>
ServerAdmin [email protected]
DocumentRoot "C:/xampp/htdocs" # change this line with your htdocs folder
ServerName localhost
ServerAlias localhost
<Directory "C:/xampp/htdocs">
Options Indexes FollowSymLinks Includes ExecCGI
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
- Teraz możesz skopiować i wkleić powyższy kod poniżej, aby dodać swoje wirtualne katalogi hosta. Na przykład pracuję nad stroną o nazwie Eatery Engine, więc poniższy fragment pozwoli mi pracować z sub-domenami na mojej lokalnej instalacji:
<VirtualHost eateryengine.dev>
ServerAdmin [email protected]
DocumentRoot "C:/xampp/htdocs/eateryengine" # change this line with your htdocs folder
ServerName eateryengine.dev
ServerAlias eateryengine.dev
<Directory "C:/xampp/htdocs/eateryengine">
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
- Następnie przejdź do pliku hosta systemu Windows, aby edytować hosty. plik będzie zlokalizowany w
C:/Windows/System32/drivers/etc/hosts
, gdzie hosts jest plikiem. Otwórz go notatnikiem. - poszukaj nazwy # localhost rozdzielczość jest obsługiwana w samym DNS.
127.0.0.1 localhost
Rozdzielczość nazwy Localhost jest obsługiwana w samym DNS.
127.0.0.1 localhost
127.0.0.1 eateryengine.dev #change to match your Virtual Host.
127.0.0.1 demo.eateryengine.dev #manually add new sub-domains.
- Uruchom ponownie Apache i przetestuj wszystko.
Oryginalny artykuł można znaleźć tutaj
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-27 09:05:26
Zawsze jest powód, aby mieć publiczny folder w konfiguracji Laravela, wszystkie publiczne materiały powinny być obecne w publicznym folderze,
Nie kieruj adresu ip / domeny do folderu głównego Laravela, ale kieruj go do folderu publicznego. Niebezpieczne jest wskazywanie adresu IP serwera do folderu głównego., bo o ile nie zapiszesz ograniczeń w
.htaccess
, można łatwo uzyskać dostęp do innych plików.,
Wystarczy wpisać warunek rewrite w pliku .htaccess
i zainstalować rewrite moduł i Włącz moduł przepisywania, problem, który dodaje publiczne w trasie zostanie rozwiązany.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-19 10:29:17
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteRule ^(.*)$ public/$1 [L]
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Aktywuj moduł mod_rewrite za pomocą
sudo a2enmod rewrite
I uruchom ponownie apache
sudo service apache2 restart
Aby użyć mod_rewrite od wewnątrz .pliki htaccess (co jest bardzo powszechnym przypadkiem użycia), edytuj domyślny VirtualHost za pomocą
sudo nano /etc/apache2/sites-available/000-default.conf
Poniżej "DocumentRoot /var/www/html" dodaj następujące linie:
<Directory "/var/www/html">
AllowOverride All
</Directory>
Uruchom ponownie Serwer:
sudo service apache2 restart
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-03 12:01:20
Wiem, że są to wiele rozwiązań dla tego problemu. Najlepszym i najłatwiejszym rozwiązaniem jest dodanie .htaccess plik w katalogu root .
Próbowałem odpowiedzi, które dostarczyliśmy dla tego problemu, jednak napotkałem pewne problemy z AUTH: api guard w Laravel.
Oto zaktualizowane rozwiązanie:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
</IfModule>
Utwórz .plik htaccess w katalogu głównym i dodaj ten kod. And everything goes right
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-06 04:19:57
Utwórz .plik htaccess w katalogu głównym i umieść kod podobny do poniższego.
<IfModule mod_rewrite.c>
#Session timeout
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
</IfModule>
Utwórz .plik htaccess w katalogu / public i umieść kod podobny do poniższego.
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-19 06:05:41
Nawet jeśli nie zalecam umieszczania Laravela w folderze głównym, są przypadki, w których nie można tego uniknąć; w takich przypadkach powyższe metody nie działają dla zasobów, więc zrobiłem szybką poprawkę zmieniając htaccess: po skopiowaniu serwera.php do indeksu.edycja php .plik htaccess tak:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
### fix file rewrites on root path ###
#select file url
RewriteCond %{REQUEST_URI} ^(.*)$
#if file exists in /public/<filename>
RewriteCond %{DOCUMENT_ROOT}/public/$1 -f
#redirect to /public/<filename>
RewriteRule ^(.*)$ public/$1 [L]
###############
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
#RewriteCond %{REQUEST_FILENAME} -d # comment this rules or the user will read non-public file and folders!
#RewriteCond %{REQUEST_FILENAME} -f #
RewriteRule ^ index.php [L]
</IfModule>
To była szybka poprawka, którą musiałem zrobić, więc każdy może ją uaktualnić.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-13 20:12:59
Laravel 5.5
Po zainstalowaniu Laravela po raz pierwszy stanąłem przed słynnym "problemem folderów publicznych" i wymyśliłem takie rozwiązanie, które według mojej osobistej opinii jest "czystsze" niż inne, które znalazłem w sieci.
Osiągnięcia
- nie ma
public
słowa w URI - Chroń plik
.env
przed ciekawskimi ludźmi
Wszystko można zrobić po prostu edytując .htaccess
za pomocą mod_rewrite
i czterech prostych Zasady.
Kroki
- Przenieś plik
.htaccess
dopublic/.htaccess
w głównym korzeniu - Edytuj jak poniżej
Wszystko skomentowałem, więc powinno być jasne (mam nadzieję) również dla tych, którzy nigdy nie używali mod_rewrite
(nie żebym był ekspertem, wręcz przeciwnie). Ponadto, aby zrozumieć zasady, musi być jasne, że w Laravel, jeśli Bill łączy się z https://example.com
, https://example.com/index.php
jest naładowany. Ten plik zawiera tylko polecenie header("refresh: 5; https://example.com/public/")
, które wysyła żądanie do https://example.com/public/index.php
. Ta druga index.php
jest odpowiedzialny za załadowanie kontrolera i innych rzeczy.
# IfModule prevents the server error if the app is moved in an environment which doesn’t support mod_rewrite
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# RULES ORIGINALLY IN public/.htaccess ---
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# --- END
# PERSONAL RULES ---
# All the requests on port 80 are redirected on HTTPS
RewriteCond %{SERVER_PORT} ^80$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
# When .env file is requested, server redirects to 404
RewriteRule ^\.env$ - [R=404,L,NC]
# If the REQUEST_URI is empty (means: http://example.com), it loads /public/index.php
# N.B.: REQUEST_URI is *never* actually empty, it contains a slash that must be set as match as below
# .* means: anything can go here at least 0 times (= accepts any sequence of characters, including an empty string)
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*) /public/index.php [L]
# If the current request is asking for a REQUEST_FILENAME that:
# a) !== existent directory
# b) !== existent file
# => if URI !== css||js||images/whatever => server loads /public/index.php, which is responsible to load the app and the related controller
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^(css|js|images|media)/(.*)$ /public/index.php [L,NC]
# If the current request is asking for a REQUEST_FILENAME that:
# a) !== existent directory
# b) !== existent file
# => if URI == css||js||images[=$1]/whatever[=$2] => server loads the resource at public/$1/$2
# If R flag is added, the server not only loads the resource at public/$1/$2 but redirects to it
# e.g.: bamboo.jpg resides in example.com/public/media/bamboo.jpg
# Client asks for example.com/media/bamboo.jpg
# Without R flag: the URI remains example.com/media/bamboo.jpg and loads the image
# With R flag: the server redirects the client to example.com/public/media/bamboo.jpg and loads the image
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(css|js|images|media)/(.*)$ /public/$1/$2 [L,NC]
# --- END
</IfModule>
Następująca reguła (pierwotnie w public/.htaccess
) może zostać usunięta. Ta sama zasada jest w rzeczywistości wyjaśniona w bardziej szczegółowy sposób w dwóch ostatnich regułach.
# Handle Front Controller...
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteRule ^ index.php [L]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-27 22:13:08
Po pierwsze możesz użyć tego kroku
Dla Laravel 5:
1. Zmień nazwę serwera.php w katalogu głównym Laravel do indeksowania.php
2. skopiuj .plik htaccess z katalogu / public do folderu głównego Laravel.
źródło: https://stackoverflow.com/a/28735930
Po wykonaniu tych kroków musisz zmienić wszystkie css i ścieżkę skryptu, ale będzie to męczące.
Propozycja Rozwiązania : po prostu możesz dokonać drobnych zmian w funkcji helpers::asset
.
Dla tego :
-
Otwórz
vendor\laravel\framework\src\Illuminate\Foundation\helpers.php
-
Goto line 130
-
Napisz
"public/".$path
zamiast$path
,function asset($path, $secure = null){ return app('url')->asset("public/".$path, $secure); }
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55
Czytałem jakiś artykuł wcześniej i działa dobrze, ale naprawdę Nie wiem, czy jest Bezpieczny, czy nie
a. Create new folder local.
b. Move all project into the local folder expect public folder.
c. Move all the content of public folder to project root.
d. Delete the blank public folder
f. Edit the index file.
Edycja indeksu.php
require __DIR__.'/../bootstrap/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
Do
require __DIR__.'/local/bootstrap/autoload.php';
$app = require_once __DIR__.'/local/bootstrap/app.php';
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-10 15:31:52
Problem polega na tym, że jeśli wpiszesz / public i będzie on nadal dostępny w adresie url, dlatego stworzyłem poprawkę, która powinna być umieszczona w public / index.php
$uri = urldecode(
parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
);
if(stristr($uri, '/public/') == TRUE) {
if(file_exists(__DIR__.'/public'.$uri)){
}else{
$actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
$actual_link = str_replace('public/', '',$actual_link);
header("HTTP/1.0 404 Not Found");
header("Location: ".$actual_link."");
exit();
return false;
}}
Ten spokój kodu usunie publiczny z adresu url i da 404, a następnie przekieruje na adres url bez publicznego
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-13 18:52:30
Utwórz nowy plik o nazwie .htaccess
w katalogu głównego projektu i umieść w nim poniższy kod:
<IfModule mod_rewrite.c>
#Session timeout
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
</IfModule>
Uwaga: jeśli zmieniłeś server.php
na {[3] } Powinieneś również zmienić nazwę w powyższym kodzie
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-01 08:12:51
Inną metodą, której używam, jest utworzenie dowiązania symbolicznego (w Linuksie, Nie wiem o Win) przy użyciu komendy ln w htdocs lub www tj. ln projectname/public project
Strona jest zatem dostępna za pośrednictwem localhost / project
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-15 15:26:57
Możesz usunąć publiczne słowo kluczowe z adresu url za pomocą różnych metod.
1) Jeśli używasz hostingu dedykowanego i masz dostęp do roota, możesz usunąć publiczne słowo kluczowe z adresu URL za pomocą hosta wirtualnego. Powinieneś podać DocumentRoot path z public. Spowoduje to uruchomienie indeksu z katalogu publicznego i usunięcie go z adresu url.
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/html/{yoursourcedirectory}/public
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
2) Jeśli nie masz dostępu roota do swojego hostingu, powinieneś genaratować nowy .plik htaccess w katalogu głównym i umieść kod jako poniżej
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
</IfModule>
Tutaj możesz uzyskać więcej referencji .Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-27 06:49:38
Utwórz .plik htaccess w katalogu głównym i wklej poniższy kod. To jest to: p
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-26 23:25:13
Możesz to zrobić w 2 prostych krokach]}
-
Zmień nazwę pliku
server.php
w katalogu głównym projektu laravel. -
Utwórz plik
.htaccess
w katalogu głównym i wklej do niego poniższy kod
Options -MultiViews -Indexes
RewriteEngine On
**#Handle Authorization Header**
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
**# Redirect Trailing Slashes If Not A Folder...**
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
#Handle Front Controller...
RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-30 07:05:29