【问题标题】:Each route is showing 404 message on shared hosting每条路由都在共享主机上显示 404 消息
【发布时间】: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,我刚刚发布了我的答案,试一试。如果它仍然不起作用,我可以考虑另一个可能的问题。

标签: php laravel


【解决方案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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多