每条路由都在共享主机上显示 404 消息
Posted
技术标签:
【中文标题】每条路由都在共享主机上显示 404 消息【英文标题】:Each route is showing 404 message on shared hosting 【发布时间】:2018-03-20 17:15:07 【问题描述】:我正在尝试在A2Hosting 共享主机上部署laravel
应用程序。我的文档根目录是:/public_html 目录。我将 laravel
应用程序中除公共文件夹外的所有内容上传到托管的 /beta 目录。
然后我将公共目录中的所有内容上传到 /public_html 目录。
在我的 index.php 文件中,我更改了以下两行:
require __DIR__.'/../beta/vendor/autoload.php';
$app = require_once __DIR__.'/../beta/bootstrap/app.php';
现在我只能正确地看到我的应用程序的主页。即 mydomain.com。 mydomain.com 后面的任何超链接都显示404 消息。在我的视图文件中,我指的是路径:
<a href="/login">Login</a>
但在部署应用程序后,每当我点击该链接(即 mydomain.com/login)时,我都会收到 404 Not Found: The resource requested could not be found on this server!
消息。我尝试在<a>
标签中将/login
更改为login
。结果相同。我该如何解决?
【问题讨论】:
你能在单独的标签中试试这个网址吗mydomain.com/index.php/login
您使用的是哪个网络服务器?阿帕奇/ nginx?您是否通过根/引导文件路由所有非文件/目录请求? (例如 /public_html/index.php)
@HimanshuUpadhyay,兄弟,你让我大吃一惊。是的,它现在显示登录页面:/ 出了什么问题?
@Eisenheim,我刚刚发布了我的答案,试一试。如果它仍然不起作用,我可以考虑另一个可能的问题。
【参考方案1】:
Eisenheim,这是 htaccess 问题:在您的 web 项目的根文件夹中获取一个 .htaccess
文件。
并在里面放入如下代码,
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^ index.php [L]
</IfModule>
然后尝试不使用index.php
,它应该可以正常工作。
【讨论】:
当你说你的 web 项目的根文件夹时,你是指我复制到 /public_html 文件夹的 laravel 应用程序的公共文件夹,还是我复制到 /beta 文件夹的 laravel 应用程序根目录? laravel 文件夹根目录。所以是的,在beta
文件夹内。在哪里可以看到 composer.json 和 composer.lock 等文件。
当我将 .htaccess 文件添加到 /public_html 文件夹时,它起作用了。所以我猜应该将 htaccess 添加到 laravel 的公共文件夹而不是应用程序根目录。
老实说,你救了我的命,谢谢,我很感激
谢谢...3小时后,我设法用这个答案解决了我的问题【参考方案2】:
对于那些使用 IIS 在 Windows 环境中托管 PHP 的人的替代答案,请记住,您需要一个 web.config 文件,其中包含配置为服务 Laravel 的重写:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Imported Rule 1" stopProcessing="true">
<match url="^(.*)/$" ignoreCase="false" />
<conditions>
<add input="REQUEST_FILENAME" matchType="IsDirectory" ignoreCase="false" negate="true" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="/R:1" />
</rule>
<rule name="Imported Rule 2" stopProcessing="true">
<match url="^" ignoreCase="false" />
<conditions>
<add input="REQUEST_FILENAME" matchType="IsDirectory" ignoreCase="false" negate="true" />
<add input="REQUEST_FILENAME" matchType="IsFile" ignoreCase="false" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
【讨论】:
以上是关于每条路由都在共享主机上显示 404 消息的主要内容,如果未能解决你的问题,请参考以下文章
Vue Webpack:上传到共享主机 url 刷新后返回 404 Not Found
我的一些 Laravel 路由(PUT 和 DELETE)在共享主机上不起作用
部署在生产共享 IIS 主机中的 React 应用程序的 .woff、.woff2 和 .ttf 字体出现 404 错误