Laravel 8具有路径的奇怪行为
最近,我在一个共享主机上安装了一个新的laravel应用程序,我遇到了路由问题: 在我的本地机器上一切正常,我得到的路由与routes文件夹中指定的完全相同。但是,在主机上,所有内容都在/public/directory之后 例如:Laravel 8具有路径的奇怪行为,laravel,routes,laravel-8,Laravel,Routes,Laravel 8,最近,我在一个共享主机上安装了一个新的laravel应用程序,我遇到了路由问题: 在我的本地机器上一切正常,我得到的路由与routes文件夹中指定的完全相同。但是,在主机上,所有内容都在/public/directory之后 例如: {{ route('leads.index') }} 在刀片文件中,在本地计算机上将导致: 127.0.0.1:8000/导线,并按预期工作 但在服务器上,它会重定向到example.com/public/leads 尝试访问example.com/leads会
{{ route('leads.index') }}
在刀片文件中,在本地计算机上将导致:
127.0.0.1:8000/导线,并按预期工作
但在服务器上,它会重定向到example.com/public/leads
尝试访问example.com/leads会重定向到example.com/public
My routes/web.php文件:
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\LeadController;
Route::get('/', [LeadController::class, 'index']);
Route::resource('leads', LeadController::class);
Root index.php
header("refresh: 0; https://example.com/public/");
Root server.php
$uri = urldecode(
parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
);
// This file allows us to emulate Apache's "mod_rewrite" functionality from the
// built-in PHP web server. This provides a convenient way to test a Laravel
// application without having installed a "real" web server software here.
if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
return false;
}
require_once __DIR__.'/public/index.php';
本地服务器上的环境文件
'url' => env('APP_URL', 'https://127.0.0.1:8000'),
服务器上的env文件
'url' => env('APP_URL', 'example.com'),
服务器上的路由:列表:
+--------+-----------+-------------------+---------------+----------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+-------------------+---------------+----------------------------------------------+------------+
| | GET|HEAD | / | | App\Http\Controllers\LeadController@index | web |
| | GET|HEAD | api/user | | Closure | api |
| | | | | | auth:api |
| | GET|HEAD | leads/create | leads.create | App\Http\Controllers\LeadController@create | web |
| | PUT|PATCH | leads/{lead} | leads.update | App\Http\Controllers\LeadController@update | web |
| | GET|HEAD | leads/{lead} | leads.show | App\Http\Controllers\LeadController@show | web |
| | DELETE | leads/{lead} | leads.destroy | App\Http\Controllers\LeadController@destroy | web |
| | GET|HEAD | leads/{lead}/edit | leads.edit | App\Http\Controllers\LeadController@edit | web |
+--------+-----------+-------------------+---------------+----------------------------------------------+------------+
.htaccess文件位于/public/文件夹中
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
选项-多视图-索引
重新启动发动机
#句柄授权头
RewriteCond%{HTTP:Authorization}。
重写规则。*-[E=HTTP\U授权:%{HTTP:AUTHORIZATION}]
#如果不是文件夹,则重定向尾部斜杠。。。
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_URI}(+)/$
重写规则^1[L,R=301]
#向前端控制器发送请求。。。
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则^index.php[L]
您的服务器在其配置文件中的根路径是什么?@sergiu。您最好将域指向项目公用文件夹,而不是根目录folder@Peppermintology我在config/APP.php中只有'url'=>env('APP_url','example.com')。在那里看不到任何根路径设置。同样在env file:APP_URL=我的意思是,例如,在您的nginx
配置文件中,会有一行类似于root/var/www/example.com/public
或类似的内容。@JohnLobo您的意思是这样更好吗?