Как убрать public из URL в проектах Laravel

168
22 октября 2018, 15:00

У меня есть проект dev.ru.

Я залил в папку dev.ru/lara проект с laravel. Но проблема в том, что сам laravel будет доступен, только если зайти в dev.ru/lara/public.

Как сделать так, чтобы он был доступен по ссылке dev.ru/lara?

Пробовал класть htaccess в папку dev.ru/lara, который перенаправляет в public, но когда переходишь на dev.ru/lara laravel пишет not found. И laravel думает, что сейчас путь /lara. А должен /.

И получается надо всем роутам делать префикс /lara, но тогда ссылки на стили получаются неправильными. Стили подключаю через asset().

Пример: есть openserver в нем домен dev.ru, в нем разные проекты, в том числе laravel в папке lara, при такой структуре сайт будет доступен по адресу dev.ru/lara/public/ http://joxi.ru/52agj8XH4DPo9r

В общем можно ли установить Laravel в подпапку и при этом не было в ссылках public?

Answer 1
  1. Скопировать .htaccess из public и создать файл index.php который будет подключать index.php из папки public, но теперь стилям нужно добавлять префикс public/.
  2. переписать функцию asset(), чтобы она сама добавляла public/ файлам.

У меня еще возникли проблемы с laravel-filemanager. Он подключает картинки через url() вместо asset(). И если заходить на dev.ru/lara4/laravel-filemanager, то превью картинок не загружалось, но сам filemanager работал. А если заходить на dev.ru/lara4/public/laravel-filemanager, то превью загружалось.

сделал define('PUBLIC_FIX',true); чтобы перенаправлять filemanager на public

index.php:

<?php
define('PUBLIC_FIX',true);
function asset($path, $secure = null)
{
    return app('url')->asset('public/'.trim($path,'/'), $secure);
}
require_once __DIR__ . '/public/index.php';

admin.blade.php

<script type="text/javascript">
    window.file_manager_url = '{{defined("PUBLIC_FIX") ? url('/public') : url('/')}}'
</script>

В итоге можно заходить как на dev.ru/lara как и на dev.ru/lara/public.

Если заходить на dev.ru/lara/public то файл сверху подключаться не будет.

2 Способ избавиться от public

Чтобы окончательно избавиться от public лучше всего настроить apache. В openserver можно настроить так:

Alias /lara/ "%sprogdir%/domains/dev.ru/lara/public/"
<Directory "%sprogdir%/domains/dev.ru/lara/public/">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
</Directory>

public/.htaccess после RewriteEngine On

RewriteBase /lara
Answer 2

В корневой директории создайте файл .htaccess и напишите в нем следующее.

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^(.*)$ public/$1 [L]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
READ ALSO
Как удалить тег &lt;a&gt; с содержимым из строки в PHP?

Как удалить тег <a> с содержимым из строки в PHP?

Как удалить тег с содержимым из строки в PHP?

169
Проблема с парсером PHP Notice: Undefined offset: 1

Проблема с парсером PHP Notice: Undefined offset: 1

Есть парсер, при появлении капчи должен ее ловить

124
react на node js на реальном сайте

react на node js на реальном сайте

Create React App is a comfortable environment for learning React, and is the best way to start building a new single-page application in React

141
Запретить добавление с определнного IP

Запретить добавление с определнного IP

Все приветПодскажите пожалуйста как сделать проверку на отказ добавления с определенного ip посредством PHP

147