我知道这是一个非常流行的问题,但我还没有找到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”:
与L5一起工作
允许我轻松地在项目之间切换(我通常同时工作2或3个项目)。
谢谢
**我使用MAMP和PHP 5.6.2
首先,您可以使用这些步骤
Laravel 5:
1. 将Laravel根文件夹中的server.php重命名为index.php
2. 从/public目录复制.htaccess文件到你的Laravel根文件夹。
来源:https://stackoverflow.com/a/28735930
在你遵循这些步骤之后,你需要改变所有的CSS和脚本路径,但这将是累人的。
解决方案:简单地你可以对helpers::asset函数做一些小的修改。
:
开放供应商\ laravel \ \ src \照亮\ \ helpers.php基础框架
后藤第130行
写“公共/”。用$path代替$path,
函数资产($path, $secure = null){
返回应用程序(url) - >资产(“公共/”。路径,确保美元);
}
我知道这个问题有很多解决方案。最好和最简单的解决方案是在根目录中添加.htaccess文件。
我尝试了我们为这个问题提供的答案,但我在Laravel中遇到了一些auth:api守卫的问题。
以下是最新的解决方案:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
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>
在根目录中创建.htaccess文件并添加以下代码。一切都很顺利
最好的方法:
我不建议删除public,而是在本地计算机上创建一个虚拟主机指向public目录,在远程主机上更改public为public_html,并将您的域指向此目录。原因,你的整个laravel代码将是安全的,因为它的一个级别下到你的公共目录:)
方法1:
我只是将server.php重命名为index.php,它就可以工作了
方法2:
这对所有laravel版本都很有效…
这是目录结构,
/laravel/
... app
... bootstrap
... public
... etc
遵循以下简单的步骤
将所有文件从公共目录移动到根目录/laravel/
现在,不需要公共目录,所以你可以选择现在删除它
现在打开index.php并进行以下替换
需要DIR。“/ . . /引导/ autoload.php”;
to
需要DIR。“/引导/ autoload.php”;
and
$app = require_once DIR.'/../bootstrap/start.php';
to
$app = require_once DIR.'/bootstrap/start.php';
现在打开bootstrap/paths.php并更改公共目录路径:
'public' => DIR.'/../public',
to
'public' => DIR.'/..',
就是这样,现在试试http:// localhost/laravel/
@rimon。ekjon说:
将Laravel根文件夹中的server.php重命名为index.php,并将/public目录中的.htaccess文件复制到Laravel根文件夹中。——就是这样!!:)
这对我很管用。
但是/public目录中的所有资源文件都找不到,请求url也不工作,因为我使用了asset() helper。
我修改了/Illuminate/Foundation/helpers.php/asset()函数如下:
function asset($path, $secure = null)
{
return app('url')->asset("public/".$path, $secure);
}
现在一切正常了:)
谢谢你@rimon。艾克乔恩和你们所有人。
2020年作者更新
不建议使用此答案。
相反,建议处理.htaccess文件。