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 .htaccess metoda 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:

  1. Działa z L5
  2. 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

Author: user1537360, 2015-02-06

22 answers

Dla Laravel 5:

  1. Zmień nazwę server.php w głównym folderze Laravel na index.php
  2. skopiuj plik .htaccess z katalogu /public do katalogu głównego Laravel folder.

To jest to !! :)

 330
Author: Asfaq Tamim,
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-16 20:19:35

Rozwiązałem problem używając 2 Odpowiedzi:

  1. zmiana nazwy serwera.php do indeksu.php (bez modyfikacji)
  2. skopiuj .htaccess z folderu publicznego do folderu głównego (jak rimon.ekjon said below)
  3. 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

 95
Author: ka_lin,
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

Ł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';
 40
Author: Muhammad Sadiq,
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-04-29 11:00:27

@Rimon.ekjon powiedział:

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 !! :)

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.

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.

 34
Author: Miron,
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-09-11 09:22:26

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>
 30
Author: Raham,
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

1) nie znalazłem działającej metody przenoszenia katalogu publicznego w L5. Chociaż możesz modyfikować niektóre rzeczy w indeksie bootstrap.php, wygląda na to, że kilka funkcji pomocniczych opiera się na założeniu, że istnieje 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 uzyskasz dostęp do każdego projektu przez zdefiniowana nazwa serwera. http://project1.dev, http://project2.dev

 21
Author: Jeremy Schaffer,
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-08 01:38:43

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.

 14
Author: Abhinav Saraswat,
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

Możliwe jest usunięcie publicznego 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 indeks.plik 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.

 11
Author: piyush patel,
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-24 08:22:08

Załóżmy, że umieściłeś wszystkie inne pliki i katalogi w folderze o nazwie 'locale'.

Tutaj wpisz opis obrazka

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';
 10
Author: Angelo Joseph Salvador,
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

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.

 6
Author: Sean Perkins,
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

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]}
  1. Przenieś wszystkie pliki z katalogu publicznego do katalogu głównego / laravel /
  2. teraz, nie ma potrzeby publicznego katalogu, więc opcjonalnie możesz go teraz usunąć
  3. 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";

  1. 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 /

 6
Author: Wasim A.,
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-09-14 12:25:29

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.

 3
Author: Reiah Paul Sam,
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

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

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

  2. Przejdź do C:/xampp/apache/conf/extra lub gdziekolwiek znajdują się Twoje pliki XAMPP.

  3. Otwórz plik o nazwie httpd-vhosts.conf z edytorem tekstu.

  4. Wokół linii 19 znajdź # NameVirtualHost *:80 i odkomentuj lub usuń hash.

  5. 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>
  1. 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>
  1. 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.
  2. 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.
  1. Uruchom ponownie Apache i przetestuj wszystko.

Oryginalny artykuł można znaleźć tutaj

 3
Author: sunny kashyap,
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

Nawet jeśli te rozwiązania wam się sprawdzą, proszę was, abyście tego nie przestrzegali. Oto powód.

Powinieneś skierować swój root serwera Apache do katalogu $LARAVEL_PATH/public zamiast $LARAVEL_PATH.

Sens posiadania katalogu sub dla hosta www root zamiast root projektu jest to, że nie przeciekasz żadnego z plików projektu przez serwer WWW.

Mimo że wszystkie pliki PHP mają przyrostek pliku .php, złośliwy użytkownik może uzyskać dostęp do twojego $LARAVEL_PATH/storage Katalog i jego podkatalog zawartość, przeczytaj composer.json lub package.json aby znaleźć podatne zależności lub odczytać .env plik itp.

Jeśli korzystasz z hostingu współdzielonego i masz obowiązkowe public_html, spróbuj zainstalować Laravel poza tym katalogiem public_html i usunąć public_html (jeśli jest pusty) i zastąpić go dowiązaniem symbolicznym do $LARAVEL_PATH/public lub jeśli chcesz, aby instancja Laravel była podkatalogiem public_html, zrób to samo, ale Utwórz dowiązanie symboliczne z $LARAVEL_PATH/public do public_html/$PROJECT_SUBDIR.

Ten katalog publiczny jest nie ma powodu, aby uczynić projekt nieco bezpieczniejszym. Rozwiąż rzeczywisty problem i nie próbuj łamać tego prostego, ale przyjemnego dodatku bezpieczeństwa. :)

Mam nadzieję, że to pomoże.
 3
Author: Mittul At TechnoBrave,
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-09-25 05:23:18

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.

Rozwiązanie Proposal: po prostu możesz dokonać drobnych zmian w funkcji helpers::asset.

Dla tego :

  1. Open vendor\laravel\framework\src\Illuminate\Foundation\helpers.php

  2. Goto line 130

  3. Napisz "public/".$path zamiast $path,

    function asset($path, $secure = null){
       return app('url')->asset("public/".$path, $secure);
    }
    
 1
Author: Ferhat KOÇER,
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-08-14 21:39:06

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

 0
Author: Eli Makumba,
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

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';
 0
Author: Yousef Altaf,
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

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

 0
Author: Plokko,
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
 You can follow only 2 step


 1- cut .htaccess from public folder and paste to root(mainFolder)  
 2- Rename server.php file to index.php AT your root dir. (mainFolder) 
 0
Author: Yagnesh bhalala,
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-11-10 13:41:10

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

  1. Przenieś plik .htaccess do public/.htaccess w głównym korzeniu
  2. 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]

EDIT: chybiłem rozwiązanie Abhinava Saraswata i jego odpowiedź powinna być zaakceptowana. Tylko jedna, prosta i jasna zasada, która przekierowuje cały ruch do folderu publicznego bez modyfikowania żadnego pliku.

 0
Author: Brigo,
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

Krok 1: serwer.plik php w katalogu głównym zmienia nazwę na indeks.php

Krok 2:

Zrozumiałem .plik htaccess z katalogu publicznego do katalogu głównego

 0
Author: Ravindra Bhanderi,
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-03-03 18:17:40

Oto najlepsze i najkrótsze rozwiązanie, które działa dla mnie od maj, 2018 dla Laravel 5.5

1-po prostu Wytnij plik .htaccess z katalogu /public do katalogu głównego 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>

2-po prostu zapisz plik .htaccess i to wszystko. Smacznego!

 0
Author: tony pro,
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-05-17 09:46:48