【发布时间】:2020-07-24 09:14:16
【问题描述】:
项目在本地主机上运行良好,但是当我将它上传到服务器时它显示
在此服务器上找不到请求的 URL /yes。
此外,在尝试使用 ErrorDocument 处理请求时遇到 404 Not Found 错误
只有 / 路由有效,其他路由在 route.php 文件中无效
【问题讨论】:
标签: laravel-5
项目在本地主机上运行良好,但是当我将它上传到服务器时它显示
在此服务器上找不到请求的 URL /yes。
此外,在尝试使用 ErrorDocument 处理请求时遇到 404 Not Found 错误
只有 / 路由有效,其他路由在 route.php 文件中无效
【问题讨论】:
标签: laravel-5
您需要在您的服务器上设置.htaccess 重写。您可能需要安装并启用 mod_rewrite apache 模块(或您选择的 http 服务器的类似替代模块)。
检查您应用的公用文件夹是否有.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>
【讨论】:
.dotfiles 是隐藏的,请确保您在控制面板上启用显示隐藏文件。
在 Laravel 5.6^ 中编辑从 public 复制的 .htacess 文件并粘贴此代码
<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>
在 public/.htacess 或 public_html/.htacess 也这样做
【讨论】:
pp 有一个 .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>
【讨论】:
在 project_folder/.htaccess 和 project_folder/public/.htaccess 中的文件夹中添加 RewriteBase
选项 -MultiViews -Indexes
RewriteEngine On
RewriteBase /your_project_folder/public
# 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]
【讨论】:
我遇到了同样的问题。我将 .htaccess 文件复制到本地主机的公用文件夹中,并将其粘贴到服务器上的 .htaccess 文件中,它可以工作。
【讨论】:
只是一个观察。当 public_html 文件夹中不存在 .htaccess 并且 php 版本被更改或升级时,会在 .htaccess 文件中生成。所以请正确检查它是否在 laravel .htaccess 之前存在。似乎 mime_module 指定了项目的版本
【讨论】: