由于公司使用的是香港虛擬主機捧请,無法配置nginx與php環(huán)境怀薛,也無法設置二級目錄悯许。
但是由于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即可發(fā)現(xiàn)地址是有誤的究流,(www.aaa.com/bb/bb),如果我們手動將地址更改為www.aaa.com/public/bb/bb這樣才能正常訪問动遭。
因此我們又想到下一個方法芬探,在route前面拼接一個/public/,但是由于route會自動加上域名厘惦,這樣之后會發(fā)現(xiàn)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下的文件是越。果不其然耳舅,用戶還是可以直接訪問當前文件目錄,這種方法果然還是有漏洞啊倚评。由于是加班弄的浦徊。一看時間不早了,馬上都沒地鐵了天梧,先這樣放在這里回去再想想其他方法吧盔性。
一回到家,打開在地鐵中百度的幾個方法(其他方法也是和這種類似)呢岗。
發(fā)現(xiàn)都使用不行冕香。只能訪問到首頁中的內容,其他頁面還是有問題后豫。只能以失敗告終
錯誤方法2:查看publi/index.php中的源碼悉尾,發(fā)現(xiàn)只有簡單的引入和基本服務啟動操作, 既然是基本操作, 我想在哪里操作是不是都一樣呢?
下面這個是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就不能購買一個服務器呢鸵赖。非得買虛擬主機呢。
但是沒辦法啊拄衰。上面怎么安排你就得怎么做啊它褪,誰叫我們是碼農呢。
百度百度著翘悉,發(fā)現(xiàn)有部分是修改.htccess文件的茫打。
因為使用過TP。我們在TP中經常會做的一個操作就是將url中的index.php給隱藏妖混。
感覺這是一個很好的方法老赤,但是由于能力有限,完全看不懂制市,原來隱藏index.php也是按照百度修改的抬旺。
沒辦法。只能硬著頭皮百度看看有沒有這種方法祥楣,終于功夫不負有心人开财,終于找到一個大佬寫的方法了。
關鍵點來了N笸省T瘅ⅰ!
正確方法:將public/.htccess文件拷貝到項目根目錄兽间,更改其中的配置(雖然我也沒看懂历葛,大哭。嘀略。)
修改后即可正常訪問恤溶,js、css屎鳍、image等引入文件也無需加上/public