Muszę usunąć index.php
lub public/index.php
z wygenerowanego adresu URL w Laravel; Powszechnie ścieżka jest taka localhost/public/index.php/someWordForRoute
, że powinno być coś takiegolocalhost/someWordForRoute.
.htaccess
<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]
app / config / app.php
'url' => 'http://localhost',
Jak mogę to zmienić?
mod_rewrite
jest włączona./var/www/project_name/public
Odpowiedzi:
Opcja 1: Użyj .htaccess
Jeśli go tam nie ma, utwórz plik .htaccess w katalogu głównym Laravel. Utwórz
.htaccess
plik w katalogu głównym Laravel, jeśli jeszcze nie istnieje. (Zwykle jest pod twoimpublic_html
folderem)Edytuj plik .htaccess tak, aby zawierał następujący kod:
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)$ public/$1 [L] </IfModule>
Teraz powinieneś mieć dostęp do witryny bez części „/public/index.php/”.
Opcja 2: Przenieś rzeczy z katalogu „/ public” do katalogu głównego
Utwórz nowy folder w katalogu głównym i przenieś wszystkie pliki i foldery z wyjątkiem folderu publicznego. Możesz to nazwać, jak chcesz. Użyję „laravel_code”.
Następnie przenieś wszystko z katalogu publicznego do folderu głównego. Powinno to spowodować coś podobnego do tego:
Następnie wszystko, co musimy zrobić, to edytować lokalizacje w
laravel_code/bootstrap/paths.php
pliku iindex.php
pliku.W
laravel_code/bootstrap/paths.php
odnaleźć następujący wiersz kodu:'app' => __DIR__.'/../app', 'public' => __DIR__.'/../public',
I zmień je na:
'app' => __DIR__.'/../app', 'public' => __DIR__.'/../../',
W programie
index.php
znajdź te wiersze:require __DIR__.'/../bootstrap/autoload.php'; $app = require_once __DIR__.'/../bootstrap/start.php';
I zmień je na:
require __DIR__.'/laravel_code/bootstrap/autoload.php'; $app = require_once __DIR__.'/laravel_code/bootstrap/start.php';
Źródło: Jak usunąć / public / z adresu URL w Laravel
źródło
etc/apache2/apache2.conf
zmieniającym się odAllowOverride None
celuAllowOverride All
, gdzie można zobaczyć config Directory<Directory /var/www/></Directory>
.<Directory ...
maAllowOverride All'
coś takiego:<Directory "/var/www/html/laravel/public"> Options Indexes FollowSymLinks MultiViews **AllowOverride All** </Directory>
Wypróbowałem to na Laravel 4.2
Zmień nazwę
server.php
w folderze głównym Laravel naindex.php
i skopiuj.htaccess
plik z/public
katalogu do folderu głównego Laravel.Mam nadzieję, że to zadziała
źródło
Nie daj się zmylić z inną opcją, której używam poniższy fragment kodu, który będzie przydatny również dla Ciebie. Umieść poniższe htacces w swoim katalogu głównym.
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ public/ [L] RewriteRule (.*) public/$1 [L] </IfModule>
Przejdź do katalogu publicznego i umieść kolejny plik htaccess z poniższym fragmentem kodu
<IfModule mod_rewrite.c> RewriteEngine On # Removes index.php from ExpressionEngine URLs RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?url=$1 [PT,L] </IfModule>
To działa... !!!
Laravel Używa poniżej .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]
źródło
OTO PROSTE KROKI, ABY USUNĄĆ PUBLICZNE Z ADRESU URL (Laravel 5)
1: Skopiuj wszystkie pliki z folderu publicznego i wklej je do folderu głównego laravel
2: Otwórz index.php i zmień
Z
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';
W laravel 4 ścieżka 2 jest
$app = require_once __DIR__.'/bootstrap/start.php';
zamiast$app = require_once __DIR__.'/bootstrap/app.php';/app.php
To jest to.
źródło
1) Sprawdź, czy mod_rewrite jest włączony. Przejdź do
/etc/apache2/mods-enabled
katalogu i sprawdź, czyrewrite.load
jest dostępny. Jeśli nie, włącz go za pomocą poleceniasudo a2enmod rewrite
.Włącza to moduł przepisywania. Jeśli jest już włączona, wyświetli komunikatModule rewrite already enabled
.2) Stwórz wirtualnego hosta dla katalogu publicznego tak, aby zamiast dawać
http://localhost/public/index.php
będziemy mogli z niego korzystaćhttp://example.com/index.php
. [stąd nazwa folderu publicznego zostanie ukryta]3) Następnie utwórz plik .htaccess, który ukryje plik index.php przed adresem URL, który powinien znajdować się w katalogu głównym (folderze publicznym)
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?/$1 [L]
źródło
mod_rewrite
był wyłączony.To prawdopodobnie ma niewiele wspólnego z Laravelem, a wszystko, co ma związek z konfiguracjami Apache.
Czy masz dostęp do konfiguracji swojego serwera Apache? Jeśli tak, sprawdź to w dokumentacji:
Powodem, dla którego wspominam o tym jako pierwszy, jest to, że najlepiej jest się go
.htaccess
całkowicie pozbyć, jeśli możesz, i użyćDirectory
tagu wewnątrzVirtualHost
tagu. Biorąc to pod uwagę, reszta tego zakłada, że z.htaccess
jakiegokolwiek powodu trzymasz się trasy.Aby to wyjaśnić, może się wydarzyć kilka rzeczy:
Pragnę zauważyć, być może bezcelowo, że
.htacces
w pytaniu wymieniono plik . Domyślam się, że jest to literówka, ale z drugiej strony jest szansa, że ją przeoczyłeś, a tak naprawdę brakuje tylko sekund, to jest dokładnie taki drobny błąd, który sprawiłby, że walę głową w ścianę, szukając czegoś trudniejszego .Twój serwer nie mógł zezwolić
.htaccess
. Aby to sprawdzić, przejdź do pliku konfiguracyjnego Apache. W nowoczesnych kompilacjach Apache zwykle nie ma tego w jednym pliku konfiguracyjnym, więc upewnij się, że używasz tego, który wskazuje na twoją aplikację, gdziekolwiek ona istnieje. Zmianado
W ramach kontynuacji dokumenty Apache zalecają również, aby ze względów bezpieczeństwa nie robić tego dla każdego folderu, jeśli zamierzasz
.htaccess
przepisać. Zamiast tego zrób to dla folderów, do których chcesz dodać.htaccess
.Czy masz
mod_rewrite
włączone? To może powodować problemy. Zauważyłem, że masz metkę u góry<IfModule mod_rewrite.c>
. Spróbuj wykomentować te tagi i zrestartuj Apache. Jeśli pojawi się błąd, to prawdopodobnie dlatego, że musisz włączyćmod_rewrite
: Jak włączyć mod_rewrite dla Apache 2.2Mam nadzieję że to pomoże. Wymieniłem niektóre z najczęstszych problemów, ale jest kilka innych, które mogą być bardziej przyziemne lub wyjątkowe. Kolejna sugestia dotycząca serwera deweloperskiego? Zainstaluj ponownie Apache. Jeśli to możliwe, zrób to z innego źródła z dobrym samouczkiem.
źródło
Dla Laravel 4 i 5:
server.php
w folderze głównym Laravel naindex.php
.htaccess
plik z/public
katalogu do głównego folderu Laravel .Otóż to !! :)
źródło
Upewnij się także, że Rewrite Engline jest włączony po edycji pliku .htaccess
źródło
Laravel jest już dostarczany z ładnym adresem URL .htaccess ... powinieneś być dobry, aby wyjść z pudełka ... http://laravel.com/docs/installation#pretty-urls
Upewnij się, że mod_rewrite jest włączony, a ścieżka domowa jest ustawiona na katalog publiczny aplikacji.
źródło
mod_rewrite
i skopiowałem kod, który jest na tej stronie i nadal nie działaServerAdmin webmaster@localhost DocumentRoot /home/web-apps/myproject/public
user
to miejsce gdzie trzymam zdjęcia, również mam plik blaszka o nazwieuser
, kiedy piszę w adresie URLmyproject.com/user
pokazuje mi zawartość folderu, zdjęciaAby to zrobić, musisz wykonać następujące kroki, które są następujące
Zmapuj swoją domenę do folderu publicznego projektu (tj. / Var / www / html / yourproject / public) (jeśli używasz Linuksa)
Przejdź do swojego publicznego folderu, edytuj
.htaccess
tam swój plikAddHandler application/x-httpd-php72 .php <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 non-www to www RewriteCond %{HTTP_HOST} !^www\. RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # Redirect non-http to https RewriteCond %{HTTPS} off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # 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] # Remove index.php RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC] RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L] </IfModule>
https
niej.źródło
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
użyj tego w .htaccess i zrestartuj serwer
źródło
Mam nadzieję, że to pomaga, tak jak w przypadku mnie.
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_URI} !^public RewriteRule ^(.*)$ public/$1 [L] </IfModule>
źródło
Właśnie zainstalowałem Laravel 5 dla projektu iw katalogu głównym znajduje się plik o nazwie
server.php
.Zmień to na
index.php
i działa lub wpisz terminal:źródło
Zmień nazwę
server.php
w folderze głównym Laravel naindex.php
i skopiuj.htaccess
plik z/public
katalogu do folderu głównego Laravel.źródło
Działa i jest w 100% BEZPIECZNY
https://medium.com/@matteovirgilio/laravel-5-how-to-change-the-public-folder-and-secure-private-files-on-shared-hosting-a8e2e5b9b25f
źródło
Jeśli używasz IIS Windows Server, dodaj
web.config
plik do folderu głównego i umieść poniższy kod:<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="Imported Rule 1" stopProcessing="true"> <match url="^(.*)$" ignoreCase="false" /> <conditions logicalGrouping="MatchAll"> <add input="{URL}" pattern="^system.*" ignoreCase="false" /> </conditions> <action type="Rewrite" url="/index.php/{R:1}" /> </rule> <rule name="Imported Rule 2" stopProcessing="true"> <match url="^(.*)$" ignoreCase="false" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" /> <add input="{R:1}" pattern="^(index\.php|images|robots\.txt|css)" ignoreCase="false" negate="true" /> </conditions> <action type="Rewrite" url="index.php/{R:1}" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
a jeśli
.htaccess
używasz tego:RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
źródło
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)/(public)/(index.php)/$ $1/$4 [L] </IfModule>
źródło
Zgodnie z Laravel 5.3 powyższe rzeczy nie będą działać poprawnie, ale proszę o spokój i wykonaj poniższe czynności:
Krok 1. Przejdź do wnętrza projektu laravel
Krok 2. Utwórz jeden losowy katalog / folder np. laravelcode
Krok 3. Przenieś wszystkie foldery i pliki (z wyjątkiem folderu publicznego )
Krok 4. Przenieś wszystkie foldery i pliki znajdujące się w folderze publicznym do projektu laravel
Krok 5. Teraz w projekcie laravel znajduje się plik index.php, proszę otwórz to i zmień ścieżki folderów dla ładowania początkowego zgodnie z nową ścieżką, tak jak poprzednio " Wymagaj DIR . '/ .. / bootstrap / autoload.php';" teraz będzie "wymagało DIR . '/ laravelcode / bootstrap / autoload.php';"
To wszystko, po prostu uruchom swój adres URL bez public i index.php, jak poniżej http: // localhost / blog /
źródło