每条路由都在共享主机上显示 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! 消息。我尝试在&lt;a&gt; 标签中将/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 消息的主要内容,如果未能解决你的问题,请参考以下文章

Directus 无法安装在共享主机上

Vue Webpack:上传到共享主机 url 刷新后返回 404 Not Found

我的一些 Laravel 路由(PUT 和 DELETE)在共享主机上不起作用

拉拉维尔 |共享主机路由无法正常工作

部署在生产共享 IIS 主机中的 React 应用程序的 .woff、.woff2 和 .ttf 字体出现 404 错误

与我的团队成员共享本地主机