Laravel“在此服务器上找不到请求的 URL。”,但它存在于“web.php”中

问题描述 投票:0回答:1

伙计们,我花了六个小时试图解决这个问题。每次我尝试访问一条路线时,我都会得到

"The requested URL was not found on this server."
,除了
"/"
路线。如果我将
web.php
上的其他路线更改为
"/"
,它就可以工作。

这是 apache 的

default.conf

<VirtualHost *:80>
 ServerName website-project
 DocumentRoot /var/www/website-project/public
 <Directory /var/www/website-project>
  Options Indexes FollowSymLinks
  AllowOverride All
  Require all granted
 </Directory>
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

这是

.htaccess
文件:

<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]

  # Handle Front Controller...
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^ index.php [L]
</IfModule>

这是我的 url 变量

.env
:

APP_URL=http://localhost:8080

这些是

web.php
的路线:

Route::get('/create', [AppointmentController::class, 'newAppointment'])->name('appointment.newAppointment');
Route::post('/create', [AppointmentController::class, 'createAppointment'])->name('appointment.createAppointment');
Route::get('/edit/{appointment}', [AppointmentController::class, 'editAppointment'])->name('appointment.editAppointment');
Route::get('/', [AppointmentController::class, 'index'])->name('appointment.index');

我应该注意,我正在

php:8.0-apache
容器上运行服务器。

我尝试过:

  • 激活
    mod_rewrite
    。显然已经开启了。
  • 在许多排列中删除和添加所有
    RewriteCond
    RewriteRule
  • 每次进行任何更改时都会运行
    php artisan route:clear
    php artisan config:clear
  • 多次重建容器。
  • 更改所有文件的审核和所有权。
  • 再次更改路由顺序和 url,如果使用
    "/"
    ,任何内容都可以工作。
laravel apache routes docker-compose
1个回答
0
投票

如果有人在挣扎,我必须把

RUN a2enmod rewrite | service apache2 restart
在apache的
dockerfile
的最后一行,因为在容器的bash中运行它是行不通的,因为你需要重新启动服务器,从而擦除更改。

© www.soinside.com 2019 - 2024. All rights reserved.