Laravel 5 – 从URL中删除公共

我知道这是一个非常受欢迎的问题,但我一直无法findLaravel 5的工作解决scheme。我一直试图从Codeigniter迁移很长一段时间,但是这个复杂的安装过程不断让我失望。

我不想运行虚拟机,这在项目之间切换时看起来很尴尬。

我不想将我的文档根目录设置为公用文件夹,这在项目之间切换时也很尴尬。

我试过.htaccess的mod_rewrite方法

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

这只是在compiled.php行7610中给了我一个Laravel NotFoundHttpException。

前一段时间我尝试了L4,我使用了将公用文件夹的内容移动到根的方法。 L5的结构是完全不同的,并且按照相同的步骤彻底打破了Laravel(服务器只返回一个空白页)。

在开发环境中是否有一个体面的方法去除“公共”:

  1. 适用于L5
  2. 允许我轻松切换项目(我通常在任何时候都在2或3个工作)。

谢谢

**我正在使用MAMP和PHP 5.6.2

对于Laravel 5:

  1. 将Laravel根文件夹中的server.php重命名为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] 

    如果还有其他需要的静态文件 ,只需将扩展名添加到前面的声明列表中即可

简单的方法,以消除公众从laravel 5url。 你只需要从公共目录中删除index.php和.htaccess,并将其粘贴到根目录下,即可将index.php中的两行replace为

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

@ rimon.ekjon说:

将Laravel根文件夹中的server.php重命名为index.php,并将.htaccess文件从/ public目录复制到您的Laravel根文件夹。 – 而已 !! 🙂

这对我有用。 但是/ public目录中的所有资源文件都找不到,请求url不起作用,因为我使用了asset()助手。

我改变/Illuminate/Foundation/helpers.php/asset()函数如下:

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

现在一切正常:)

谢谢@ rimon.ekjon和你们所有人。

1)我还没有find在L5中移动公共目录的工作方法。 虽然你可以在bootstrap index.php中修改一些东西,但是看起来有几个辅助函数是基于那个公共目录的假设。 说实话,你真的不应该移动公共目录。

2)如果你使用MAMP,那么你应该为每个项目创build新的虚拟主机,每个项目公共目录的服务。 一旦创build,您可以通过定义的服务器名称访问每个项目 http : //project1.dev,http://project2.dev

假设您将所有其他文件和目录放在名为“locale”的文件夹中。

在这里输入图像描述

只要去index.phpfind这两行:

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

有可能在laravel5中删除公共URL。 按着这些次序:

步骤1将所有文件从公共目录复制并粘贴到根目录

第2步打开index.php文件replace为

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

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

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

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

并删除所有的caching和cookies。

我想添加@Humble Learner,并注意“固定”资源的urlpath的正确位置是/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, '/'); } 

这将修复脚本,样式和图像path。 任何资产path。

方法1:

我只是重命名server.php index.php ,它的工作原理

方法2:

这对所有的laravel版本都适用…

这是我的目录结构,

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

按照这些简单的步骤

  1. 将所有文件从公共目录移动到root / laravel /
  2. 现在,不需要公共目录,所以可以select现在删除它
  3. 现在打开index.php并做如下的replace

需要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并更改公共目录path:

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

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

就是这样,现在尝试http:// localhost / laravel /

在Laravel安装程序中总是有一个公用文件夹的理由,所有公共相关的东西都应该存在于公用文件夹中,

不要把你的IP地址/域指向Laravel的根文件夹,但指向公用文件夹。 将服务器IP指向根文件夹是不安全的,因为除非您在.htaccess编写限制,否则可以轻松访问其他文件。

只要在.htaccess文件中写入重写条件并安装重写模块并启用重写模块,就可以解决路由中公开的问题。

对于XAMPP用户删除公共URL而不触及laravel默认文件系统是为您的应用程序设置一个虚拟主机做这个jsut按照这些步骤

  1. 打开XAMPP控制面板应用程序并停止Apache。 请注意,后期的Windows机器可能会将其作为服务运行,因此请检查Apache模块左侧的框。

  2. 导航到C:/ xampp / apache / conf / extra或XAMPP文件所在的位置。

  3. 用文本编辑器打开名为httpd-vhosts.conf的文件。

  4. 在第19行附近find#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主机文件来编辑您的主机。 该文件将位于C:/Windows/System32/drivers/etc/hosts ,其中hosts是该文件。 用记事本打开它。
  2. 寻找

`#本地主机名称parsing是在DNS本身内处理的。

127.0.0.1 localhost

本地主机名称parsing是在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并testing一切。

原文可以在这里findhttp://austin.passy.co/2012/setting-up-virtual-hosts-wordpress-multisite-with-xampp-on-windows-7/

我使用的另一种方法是在htdocs或www中使用ln命令创build符号链接(在Linux中不知道Win)。因此,可以通过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'; 

即使我不build议把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> 

这是我必须做的一个快速解决scheme,所以欢迎任何人升级它。

  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)