返回

WHM 中 Laravel 路由失效?启用 mod_rewrite 解决 404 错误!

php

在 WHM 环境下托管 Laravel 应用时,你可能会碰到路由失效,页面返回 404 错误的情况。这个问题通常与 Apache 的 mod_rewrite 模块有关。即使你在 phpinfo() 中找不到 mod_rewrite 的信息,也别轻易下结论说它没安装。cPanel 和 WHM 的特殊机制导致它不会直接显示在 phpinfo() 中。

那我们该如何在 WHM 中启用和配置 mod_rewrite,让 Laravel 路由正常工作呢?接下来,我们将一步步进行讲解。

第一步:检查 mod_rewrite 模块是否安装

首先,我们要确认服务器是否安装了 mod_rewrite 模块。你可以通过 SSH 连接到服务器,然后运行以下命令:

httpd -M | grep rewrite

如果命令输出结果包含 rewrite_module (shared),说明 mod_rewrite 已经安装并加载了。如果没有任何输出,你需要手动安装它。

第二步:启用 mod_rewrite 模块

确认模块安装完成后,我们就要在 Apache 配置文件中启用它。你可以使用 WHM 的 Include Editor 来完成:

  1. 登录 WHM 控制面板。
  2. 进入 "Home" > "Service Configuration" > "Apache Configuration" > "Include Editor"。
  3. 在 "Pre VirtualHost Include" 部分选择 "All Versions"。
  4. 在文本框中添加以下代码:
<IfModule mod_rewrite.c>
    RewriteEngine On
</IfModule>
  1. 点击 "Update" 按钮保存修改。

这段代码的含义是:如果服务器上存在 mod_rewrite 模块,就启用 RewriteEngine。

第三步:配置虚拟主机

启用 mod_rewrite 模块后,还需要在 Laravel 应用的虚拟主机配置文件中进行一些配置。

  1. 在 WHM 中进入 "Home" > "Domains" > "List Accounts"。
  2. 找到你的 Laravel 应用所在的账户,点击右侧的 "cPanel" 按钮进入该账户的 cPanel 控制面板。
  3. 在 cPanel 中找到 "Domains" > "Apache Handlers"。
  4. 选择你的 Laravel 应用所在的域名,点击 "Edit" 按钮。
  5. 在 "Handler" 字段中选择 "Application/x-httpd-php"。
  6. 点击 "Save" 按钮保存修改。

第四步:修改 .htaccess 文件

接下来,我们需要在 Laravel 应用的根目录下创建一个 .htaccess 文件,并在其中添加以下代码:

<IfModule mod_rewrite.c>
    RewriteEngine On

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

这段代码的作用是将所有非文件和非文件夹的请求重定向到 index.php 文件,让 Laravel 的路由系统可以处理这些请求。

第五步:重启 Apache 服务

完成以上步骤后,需要重启 Apache 服务才能使修改生效。你可以通过 WHM 或 SSH 连接到服务器,执行以下命令重启 Apache:

service httpd restart

第六步:测试 Laravel 路由

重启 Apache 后,你可以尝试访问 Laravel 应用的路由,看看是否可以正常工作。如果所有配置都正确,你的 Laravel 应用的路由应该可以正常访问了。

一些额外的建议

  • 如果你的 Laravel 应用使用了 HTTPS,需要在 .htaccess 文件中添加相应的 HTTPS 重定向规则。
  • 如果你的 Laravel 应用使用了自定义域名,要确保该域名已经正确解析到你的服务器。
  • 如果你的 Laravel 应用使用了缓存,需要清除缓存才能使修改生效。
  • 如果以上步骤都无法解决问题,可以查看 Apache 的错误日志,获取更多信息。

通过以上步骤,你应该可以在 WHM 中成功启用 mod_rewrite 模块,并解决 Laravel 应用的路由问题。请记住,每个服务器环境可能略有不同,你需要根据自己的实际情况进行调整。希望这篇文章能帮助你解决问题,让你的 Laravel 应用顺利运行。

常见问题解答

1. 为什么我的 phpinfo() 中没有显示 mod_rewrite?

cPanel 和 WHM 有其特殊的运作方式,即使 mod_rewrite 已安装并启用,它也可能不会直接显示在 phpinfo() 中。你可以通过 httpd -M | grep rewrite 命令来确认它是否已安装。

2. .htaccess 文件应该放在哪里?

.htaccess 文件应该放在 Laravel 应用的根目录下,也就是 public 文件夹所在的目录。

3. 如果我修改了 .htaccess 文件,还需要重启 Apache 吗?

是的,你需要重启 Apache 服务才能使 .htaccess 文件的修改生效。

4. 如果我仍然遇到 404 错误,应该怎么办?

你可以查看 Apache 的错误日志,获取更多信息。错误日志通常位于 /usr/local/apache/logs/error_log/var/log/httpd/error_log

5. 如何清除 Laravel 应用的缓存?

你可以通过 SSH 连接到服务器,然后在 Laravel 应用的根目录下执行以下命令来清除缓存:

php artisan cache:clear