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
相关产品推荐
相关产品推荐

