我知道这是一个非常流行的问题,但我还没有找到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
问题是如果你输入/public,它仍然会在url中可用,因此我创建了一个修复,应该放在public/index.php
$uri = urldecode(
parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
);
if(stristr($uri, '/public/') == TRUE) {
if(file_exists(__DIR__.'/public'.$uri)){
}else{
$actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
$actual_link = str_replace('public/', '',$actual_link);
header("HTTP/1.0 404 Not Found");
header("Location: ".$actual_link."");
exit();
return false;
}}
这段和平代码将从url中删除public,并给出404,然后重定向到没有public的url
最好的方法:
我不建议删除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/
请注意,当使用Docker服务Laravel项目时:你不需要做这些。只有当你的网站的根目录(或更常见的:public_html)是你的Laravel项目时才使用这个选项(当你使用Docker时不是这样)。
不!
你真的不应该把Laravel根文件夹中的server.php重命名为index.php
然后从/public目录复制。htaccess文件到你的Laravel根文件夹!!
这样,每个人都可以访问您的一些文件。例如环境)。你自己试试。你不会想要的!
DO
相反,你应该在根目录下创建一个。htaccess文件,如下所示:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L,QSA]
这将无声地将所有基本uri重写到/public文件夹。甚至所有的头文件,例如HTTP授权头文件,以及所有可选的URI参数都将被默默地传递到/public文件夹。
这是所有