我知道这是一个非常流行的问题,但我还没有找到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,而是在本地计算机上创建一个虚拟主机指向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/
我以前读过一些文章,它工作得很好,但真的不知道是否安全
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';
to
require __DIR__.'/local/bootstrap/autoload.php';
$app = require_once __DIR__.'/local/bootstrap/app.php';
在根目录中创建.htaccess文件,并将如下代码放置。
<IfModule mod_rewrite.c>
#Session timeout
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
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>
在/public目录下创建.htaccess文件,并将代码如下所示。
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
我知道这个问题有很多解决方案。最好和最简单的解决方案是在根目录中添加.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文件并添加以下代码。一切都很顺利