我知道这是一个非常流行的问题,但我还没有找到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
我知道这个问题有很多解决方案。最好和最简单的解决方案是在根目录中添加.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,它仍然会在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