[英]Laravel - How to remove index.php from Laravel in windows xampp
問題:
我的路線除了根主頁以外都無法正常工作,我正在尋找兩天時間來找到解決此問題的方法,並且發現應該更改.htaccess
文件,但解決方案無法解決我的情況,首先是url localhost/quotes/public
與我配合良好,但是在某些時候我不確定此問題顯示的是什么
我試過的
我的htaccess文件:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
工作於:
問題是您的.htaccess
將所有內容都重寫到前端控制器,該前端控制器通常位於{host}/index.php
。 但是,在您的應用程序中,它位於{host}/quotes/public/index.php
。
因此,您有2個選擇:
1.虛擬主機
在您的XAMPP Apache中設置一個虛擬主機,即指向。 htdocs/quotes/public
myapp.local
此處是實現此目的的示例: 如何在XAMPP上創建虛擬主機 。 (不要忘記將主機添加到您的hosts文件中,並使其指向127.0.0.1上的本地Macine。)然后,您可以在myapp.local/whatever-route-you-define
上訪問您的應用程序。 或者,您可以不用XAMMP並安裝預配置的homestead虛擬機 。
2.重寫規則
更改您的重寫規則,以將所有請求重寫為quotes/public/index.php
而不是index.php
。 我不是htaccess專家,但我認為它應該像更改此命令一樣簡單:
RewriteRule ^ index.php [L]
對此:
RewriteRule ^ quotes/public/index.php [L]
請注意,您仍然需要通過localhost/quotes/public/whatever-route-you-define
來訪問應用程序,這不是理想的imo。 您的開發版本應盡可能接近實時版本,並且如果您開始使用絕對路徑和相對路徑以及代碼中的內容,那么事情早晚會變得一團糟。
就個人而言,我會去Homestead,我一直都在使用它,一旦運行它就可以很好地工作。
順便說一句,為什么localhost/quotes/public/index.php
現在為您工作的原因是因為RewriteCond %{REQUEST_FILENAME} !-f
告訴Apache 不要將任何請求重寫到實際存在的文件中(否則您將無法訪問諸如CSS之類的靜態資產)。
.htaccess
文件必須位於應用程序的根目錄下。 在此文件中添加:
RewriteEngine On
RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC]
RewriteRule ^ %1 [L,NE,R=302]
RewriteRule ^((?!public/).*)$ public/$1 [L,NC]
假設您還沒有接觸過Laravel的原始體系結構,並且公共數據仍然位於同一位置: public/
文件夾
您也可以按照這個好的教程
讓我舉一個例子,說明我設置路線的方式。
在app \\ Http \\ routes.php中,這是我擁有的三個示例路由。
Route::get('/', function () {
$values = app('App\Http\Controllers\KeywordController')->index();
dd($values);
return view('welcome');
});
Route::get('googlefile', function () {
$output = app('App\Http\Controllers\KeywordController')->printToFileGoogle();
dd($output);
});
Route::get('bingfile', function () {
$output = app('App\Http\Controllers\KeywordController')->printToFileBing();
dd($output);
});
我的環境中安裝了WAMP。 我在app \\ Http \\ Controllers \\ KeywordController.php中創建了一個控制器。 如果我的瀏覽器設置為localhost / googlefile,它將進入KeywordController.php中的方法printToFileGoogle()。
請嘗試與此類似的操作,並告訴我您是否遇到錯誤以及發生了什么錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.