Laravel网站上传至虚拟主机后显示目录结构而非指定Web路由
我来帮你排查这个问题,Laravel上传到虚拟主机后显示目录结构,通常是Web根目录配置不对或者服务器重写规则没生效导致的,咱们一步步来解决:
确认虚拟主机的Web根目录指向
public文件夹
这是最常见的原因!很多虚拟主机默认把网站根目录设为项目的根文件夹(比如public_html),但Laravel的入口文件是public/index.php,必须让服务器把请求指向这个文件夹。你可以登录虚拟主机控制面板(比如cPanel),找到域名管理相关的设置,把对应域名的根目录修改为你的项目文件夹/public(举个例子:如果项目放在public_html/laravel里,就设置为public_html/laravel/public)。检查Apache是否启用了
mod_rewrite模块
你的.htaccess规则依赖mod_rewrite模块才能生效。如果是cPanel主机,在“软件”板块找到“Apache模块”,勾选mod_rewrite并保存;如果有SSH权限,可以执行命令:sudo a2enmod rewrite sudo systemctl restart apache2确保
.htaccess文件放在public目录下
Laravel的.htaccess应该放在public文件夹里,而不是项目根目录。建议替换成Laravel默认的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] # Send Requests To Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>检查目录权限
确保public文件夹及内部文件的权限正确,一般设置文件夹权限为755,文件权限为644。在cPanel里可以右键文件夹选择“更改权限”来调整。如果是Nginx服务器
要是你的虚拟主机用的是Nginx,.htaccess是不起作用的,需要修改Nginx配置文件,添加重写规则:location / { try_files $uri $uri/ /index.php?$query_string; }这种情况可能需要联系主机提供商帮忙修改配置,或者通过主机面板调整。
内容的提问来源于stack exchange,提问作者Prateek Saini

