You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 9配置正确.htaccess与虚拟主机仍报NotFoundHttpException

Laravel 9 NotFoundHttpException 排查与解决

在Laravel 9环境中,已配置.htaccess和虚拟主机,但访问路由(如127.0.0.1:8000或admin.afterhire.local)时仍出现NotFoundHttpException错误,以下是现有配置及排查解决方法:


现有配置详情

/public目录下的.htaccess配置

<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]
    Header set X-Frame-Options SAMEORIGIN
</IfModule>

虚拟主机配置

<VirtualHost *:80>
    ServerAlias *.afterhire.local
    ServerAdmin webmaster@localhost
    DocumentRoot "/var/www/html/afterhire/public/"

    <Directory "/var/www/html/afterhire/public/">
        AllowOverride All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

可能原因与排查解决方法

1. Apache重写模块未启用

  • 排查:执行apache2ctl -M(Debian/Ubuntu)或httpd -M(CentOS/RHEL),查看输出中是否包含rewrite_module (shared)。
  • 解决:启用模块,执行a2enmod rewrite(Debian/Ubuntu),然后重启Apache:systemctl restart apache2;CentOS/RHEL需编辑httpd.conf,确保LoadModule rewrite_module modules/mod_rewrite.so未被注释,再执行systemctl restart httpd。

2. 虚拟主机配置未生效

  • 排查:检查虚拟主机配置文件是否放在Apache的sites-available目录(Debian/Ubuntu),且已执行a2ensite 你的配置文件名.conf;查看${APACHE_LOG_DIR}/error.log,确认无配置加载报错。
  • 解决:确保配置文件已启用,重启Apache后执行apache2ctl -S,查看已加载的虚拟主机列表,确认*.afterhire.local存在。

3. 本地DNS解析问题(针对admin.afterhire.local)

  • 排查:执行ping admin.afterhire.local,查看是否解析到服务器IP或127.0.0.1。
  • 解决:编辑本地/etc/hosts文件,添加一行127.0.0.1 admin.afterhire.local,保存后执行systemd-resolve --flush-caches刷新DNS缓存。

4. Laravel路由配置问题

  • 排查:检查routes/web.php或routes/api.php中是否存在对应路由;执行php artisan route:list查看所有已注册路由,确认目标路由存在且HTTP方法匹配。
  • 解决:若路由未定义则补充配置;若路由缓存导致更新不生效,执行php artisan route:clear清除缓存。

5. 文件权限问题

  • 排查:确认Apache用户(通常为www-data)对Laravel项目的storage、bootstrap/cache目录有读写权限。
  • 解决:执行以下命令设置权限:
sudo chown -R www-data:www-data /var/www/html/afterhire
sudo chmod -R 755 /var/www/html/afterhire
sudo chmod -R 775 /var/www/html/afterhire/storage /var/www/html/afterhire/bootstrap/cache

6. .htaccess未被Apache识别

  • 排查:查看Apache错误日志,确认无.htaccess相关报错;检查虚拟主机<Directory>块中的AllowOverride All是否正确设置,且路径与DocumentRoot一致。
  • 解决:确保AllowOverride All生效,重启Apache;若问题仍存在,可尝试将.htaccess中的规则直接写入虚拟主机的<Directory>块内测试。

7. PHP环境或项目依赖问题

  • 排查:检查PHP版本是否符合Laravel 9要求(PHP 8.0.2+);执行php artisan serve测试内置服务器是否能正常访问路由,若内置服务器正常则问题出在Apache配置。
  • 解决:升级PHP至符合要求的版本;若内置服务器也报错,执行composer install确保项目依赖完整,检查.env文件配置是否正确。

内容的提问来源于stack exchange,提问作者Zain ul Abideen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 17:53:22