Laravel 5 – Удалить публикацию по URL-адресу

Я знаю, что это очень популярный вопрос, но я не смог найти работающее решение для Laravel 5. Я пытаюсь перенести из Codeigniter в течение длительного времени, но этот запутанный процесс установки не дает мне отключиться.

Я не хочу запускать виртуальную машину, это просто неудобно при переключении между проектами.

Я не хочу, чтобы корень моего документа был включен в общую папку, это также неудобно при переключении между проектами.

Я пробовал метод .htaccess mod_rewrite

<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)$ public/$1 [L] </IfModule> 

Это просто дает мне Laravel NotFoundHttpException в compiled.php строке 7610.

Когда я пытался L4 некоторое время назад, я использовал метод перемещения содержимого общей папки в корневой каталог. Структура L5 совсем другая, и после тех же самых шагов полностью сломался Laravel (сервер вернул бы только пустую страницу).

Есть ли приемлемый метод удаления «public» в среде разработки, которая:

  1. Работает с L5
  2. Позволяет мне легко переключаться между проектами (я обычно работаю на 2 или 3 в любой момент).

благодаря

** Я использую MAMP и PHP 5.6.2

Для Laravel 5:

  1. Переименуйте server.php в корневую папку Laravel на index.php
  2. Скопируйте файл .htaccess из /public каталога в корневую папку Laravel.

Это оно !! 🙂

Я решил проблему, используя 2 ответа:

  1. Переименование server.php на index.php (без изменений)
  2. Скопируйте файл .htaccess из общей папки в корневую папку (например, rimon.ekjon)
  3. Изменение .htaccess для статистики:

     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] 

    Если есть другие статические файлы, необходимо просто добавить расширение в предыдущий объявленный список

Легкий способ удалить публикацию из larvel 5 url. Вам просто нужно обрезать index.php и .htaccess из общего каталога и вставить его в корневой каталог, вот и все и заменить две строки в index.php как

 require __DIR__.'/bootstrap/autoload.php'; $app = require_once __DIR__.'/bootstrap/app.php'; 

@ rimon.ekjon сказал:

Переименуйте server.php в корневую папку Laravel в index.php и скопируйте файл .htaccess из / общедоступного каталога в корневую папку Laravel. — Это оно !! 🙂

Это работает для меня. Но все файлы ресурсов в / общедоступном каталоге не смогли найти и запросить URL-адреса, которые не работали, потому что я использовал помощник asset ().

Я изменил функцию /Illuminate/Foundation/helpers.php/asset () следующим образом:

 function asset($path, $secure = null) { return app('url')->asset("public/".$path, $secure); } 

Теперь все работает 🙂

Спасибо @ rimon.ekjon и всем вам.

1) Я не нашел рабочий метод для перемещения общего каталога в L5. Хотя вы можете изменить некоторые вещи в bootstrap index.php, кажется, что несколько вспомогательных функций основаны на предположении, что этот общедоступный каталог существует. Честно говоря, вы действительно не должны перемещать общий каталог.

2) Если вы используете MAMP, тогда вы должны создавать новые vhosts для каждого проекта, каждый из которых служит для создания общего каталога. После создания вы получаете доступ к каждому проекту по определенному имени сервера. http://project1.dev , http://project2.dev

Предположим, вы разместили все остальные файлы и каталоги в папке с именем «locale».

введите описание изображения здесь

Просто перейдите в index.php и найдите эти две строки:

 require __DIR__.'/../bootstrap/autoload.php'; $app = require_once __DIR__.'/../bootstrap/app.php'; 

и измените их на это:

 require __DIR__.'/locale/bootstrap/autoload.php'; $app = require_once __DIR__.'/locale/bootstrap/app.php'; 

Можно удалить публикацию из url в laravel5. Следуй этим шагам:

шаг 1 скопировать весь файл из общедоступного и вставить в корневой каталог

Шаг 2 Откройте файл index.php, замените его на

  require __DIR__.'/../bootstrap/autoload.php'; 

в

  require __DIR__.'/bootstrap/autoload.php'; 

а также

 $app = require_once __DIR__.'/../bootstrap/app.php'; 

в

 $app = require_once __DIR__.'/bootstrap/app.php'; 

И удалите весь кеш и файлы cookie.

Я хотел бы добавить к @Humble Learner и отметить, что правильное местоположение для «исправления» URL-адреса для активов – это /Illuminate/Routing/UrlGenerator.php/asset ().

Обновите метод для соответствия:

 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, '/'); } 

Это позволит исправить скрипты, стили и пути изображения. Все для путей к ресурсам.

СПОСОБ 1:

Я просто переименовал server.php в index.php и он работает

СПОСОБ 2:

Это хорошо работает для всех версий laravel …

Вот моя структура каталогов,

 /laravel/ ... app ... bootstrap ... public ... etc 

Следуйте этим простым шагам

  1. переместить все файлы из общего каталога в root / laravel /
  2. теперь нет необходимости в общедоступном каталоге, поэтому, возможно, вы можете удалить его сейчас
  3. теперь откройте index.php и выполните следующие замены

требуется DIR . '/ .. / bootstrap / autoload.php';

в

требуется DIR . '/ bootstrap / autoload.php';

а также

$ app = require_once DIR . '/ .. / bootstrap / start.php';

в

$ app = require_once DIR . '/ bootstrap / start.php';

  1. теперь открываем bootstrap / paths.php и изменяем путь к общедоступной директории:

'public' => DIR . '/ .. / public',

в

'public' => DIR . '/ ..',

и все, теперь попробуйте http: // localhost / laravel /

Чтобы пользователь XAMPP удалял публикацию из url, не касаясь файловой системы laravel по умолчанию, необходимо установить виртуальный хост для вашего приложения, чтобы сделать это. Jsut выполните следующие действия.

  1. Откройте приложение панели управления XAMPP и остановите Apache. Имейте в виду, что поздние компьютеры Windows могут запускать его как службу, поэтому установите флажок слева от модуля Apache.

  2. Перейдите в папку C: / xampp / apache / conf / extra или где находятся файлы XAMPP.

  3. Откройте файл с именем httpd-vhosts.conf с помощью текстового редактора.

  4. Вокруг строки 19 найдите # NameVirtualHost *: 80 и раскомментируйте или удалите хэш.

  5. В самом низу файла вставьте следующий код:

    <VirtualHost *> ServerAdmin admin@localhost.com 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>

  6. Теперь вы можете скопировать и вставить код выше, чтобы добавить каталоги виртуального хоста. Например, я работаю над сайтом под названием Eatery Engine, поэтому следующий фрагмент позволит мне работать с поддоменами на моей локальной установке:

<VirtualHost eateryengine.dev> ServerAdmin admin@localhost.com 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. Затем перейдите к файлу хоста Windows, чтобы изменить ваши HOSTS. файл будет расположен на C:/Windows/System32/drivers/etc/hosts , где хосты – это файл. Откройте его с помощью блокнота.
  2. Искать

`#localhost имя разрешения обрабатывается в самом DNS.

127.0.0.1 localhost

Разрешение имени локального хоста обрабатывается в самом 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. Перезапустите Apache и проверьте все.

Оригинальную статью можно найти здесь http://austin.passy.co/2012/setting-up-virtual-hosts-wordpress-multisite-with-xampp-on-windows-7/

Всегда есть причина иметь общую папку в настройке Laravel, все публичные материалы должны присутствовать в общей папке,

Не указывайте свой IP-адрес / домен в корневую папку Laravel, но укажите его в общую папку. Небезопасно указывать сервер Ip на корневую папку. Поскольку, если вы не написали ограничения в .htaccess , можно легко получить доступ к другим файлам.

Просто напишите условие перезаписи в файле .htaccess и установите модуль rewrite и включите модуль перезаписи, проблема, которая добавит публики в маршрут, будет решена.

Другой метод, который я использую, – создать символическую ссылку (в Linux, не знаю о Win) с помощью команды ln в htdocs или www ie ln projectname/public project Таким образом, сайт доступен через localhost / project

Я прочитал статью раньше, и она работает нормально, но на самом деле не знаю, безопасно или нет

  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. 

Отредактируйте index.php

 require __DIR__.'/../bootstrap/autoload.php'; $app = require_once __DIR__.'/../bootstrap/app.php'; 

в

 require __DIR__.'/local/bootstrap/autoload.php'; $app = require_once __DIR__.'/local/bootstrap/app.php'; 

Даже если я не рекомендую класть Laravel в корневую папку, есть случаи, когда этого избежать нельзя; для этих случаев вышеуказанные методы не работают для активов, поэтому я быстро исправил изменение htaccess: после копирования server.php на index.php отредактируйте файл .htaccess следующим образом:

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

Это было быстрое решение, которое я должен был сделать, чтобы кто-нибудь мог его обновить.

  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) 

Просто создайте файл .htaccess у root и добавьте в него эти строки

 <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)$ public/$1 [L] </IfModule> 

Это оно!