簡體   English   中英

Laravel-如何在Windows Xampp中從Laravel刪除index.php

[英]Laravel - How to remove index.php from Laravel in windows xampp

問題:

我的路線除了根主頁以外都無法正常工作,我正在尋找兩天時間來找到解決此問題的方法,並且發現應該更改.htaccess文件,但解決方案無法解決我的情況,首先是url localhost/quotes/public與我配合良好,但是在某些時候我不確定此問題顯示的是什么

我試過的

  • 創建另一條路線,我確保沒有一條路線僅在本地路線上有效,但在首頁上仍然無效
  • 試圖將我的XAMP上的OverrideMode從“無”更改為“全部”,沒有解決任何問題
  • 試圖手動鍵入localhost / quotes / public / index.php BOOM一切正常..

我的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>

工作於:

  • Windows 10
  • XAMP
  • Laravel 5.2.35

問題是您的.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM