由于公司使用的是香港虚拟主机,无法配置nginx与php环境,也无法设置二级目录。
但是由于laravel使用的是public/index.php作为入口文件,我们这里只能修改laravel的配置,百度了很多,网上的答案各种各样。
若想直接获取方法,直接看最下面即可。
这里述说我百度后的解决过程:
错误方法1、在项目根目录新建一个index.php,然后在文件中讲public/index.php引入
require_once dirname(__FILE__) . "/public/index.php";
这样做了之后,我们可以访问到首页,样式(CSS、JS、image)等需要引入的信息前面得加上/public,
(比如域名为www.aaa.com)首页是一点问题没有,但是使用route路由跳转到其他控制器中会找不到文件。
我们查看url即可发现地址是有误的,(www.aaa.com/bb/bb),如果我们手动将地址更改为www.aaa.com/public/bb/bb这样才能正常访问。
因此我们又想到下一个方法,在route前面拼接一个/public/,但是由于route会自动加上域名,这样之后会发现url又变成了
www.aaa.com/public/http://www.aaa.com/bb/bb,显然这不是我们所需要的结果。这样方法又被给否定了。
这样不行的话 那我们能不能在网站首页判断当前url是否存在/public/,如果不存在,那么我们就强制给当前url加上/public/呢?
说做就做,我们在首页中加上一个判断,首先我的想法是通过依赖注入的$request去获取当前当前url是否存在/public/,如果不存在那么我就将当前页面跳转到www.aaa.com/public/中。咦!这样好像可以啊。a标签中使用route也能跳转到www.aaa.com/public/bb/bb,这样好像可以啊。
但是突然又想到了laravel将入口文件设计在public/index.php中是有目的的,那就是不让用户通过pathinfo访问到其他文件夹。这样会不会让用户输入www.aaa.com/public/app/访问到我app下的文件。果不其然,用户还是可以直接访问当前文件目录,这种方法果然还是有漏洞啊。由于是加班弄的。一看时间不早了,马上都没地铁了,先这样放在这里回去再想想其他方法吧。
一回到家,打开在地铁中百度的几个方法(其他方法也是和这种类似)。
发现都使用不行。只能访问到首页中的内容,其他页面还是有问题。只能以失败告终
错误方法2:查看publi/index.php中的源码,发现只有简单的引入和基本服务启动操作, 既然是基本操作, 我想在哪里操作是不是都一样呢?
下面这个是public/index.php的源码
define('LARAVEL_START', microtime(true));
require __DIR__.'/../vendor/autoload.php';
$app= require_once __DIR__.'/../bootstrap/app.php';
$kernel= $app->make(Illuminate\Contracts\Http\Kernel::class);
$response= $kernel->handle(
$request= Illuminate\Http\Request::capture()
);
$response->send();
$kernel->terminate($request, $response);
那我们能不能将index.php中的源码复制到根目录,然后修改引入的地址呢?
修改后的源码
define('LARAVEL_START', microtime(true));
require __DIR__ . '/vendor/autoload.php';
$app= require_once __DIR__ . '/bootstrap/app.php';
$kernel= $app->make(Illuminate\Contracts\Http\Kernel::class);
$response= $kernel->handle(
$request= Illuminate\Http\Request::capture()
);
$response->send();
$kernel->terminate($request, $response);
然而事实却是不出乎意料的又失败了。哎,这东西真难受啊。为什么boss就不能购买一个服务器呢。非得买虚拟主机呢。
但是没办法啊。上面怎么安排你就得怎么做啊,谁叫我们是码农呢。
百度百度着,发现有部分是修改.htccess文件的。
因为使用过TP。我们在TP中经常会做的一个操作就是将url中的index.php给隐藏。
感觉这是一个很好的方法,但是由于能力有限,完全看不懂,原来隐藏index.php也是按照百度修改的。
没办法。只能硬着头皮百度看看有没有这种方法,终于功夫不负有心人,终于找到一个大佬写的方法了。
关键点来了!!!
正确方法:将public/.htccess文件拷贝到项目根目录,更改其中的配置(虽然我也没看懂,大哭。。)
修改后即可正常访问,js、css、image等引入文件也无需加上/public
参考链接:laravel 修改.htaccess文件 重定向public - BLO博客