Laravel 4子目录应用部署后全路由空白页问题求助
嘿,我来帮你排查这个Laravel 4部署到WordPress子目录后路由空白的问题,这种场景我碰到过好几次,咱们一步步来解决:
Laravel 4的入口是public/index.php,很多人容易犯的错是直接把整个Laravel项目丢进subdirectory里。正确的做法应该是把public文件夹里的所有内容放到subdirectory,而Laravel的核心文件(app、bootstrap、vendor这些)最好放在web根目录之外(比如上级目录),避免被直接访问。
如果已经把整个项目放在subdirectory里了,那得修改public/index.php里的路径配置:
打开public/index.php,找到这两行:
require __DIR__.'/../bootstrap/autoload.php'; $app = require_once __DIR__.'/../bootstrap/start.php';
根据你的实际目录结构调整路径,比如如果核心文件就在subdirectory下,那路径要改成__DIR__.'/bootstrap/autoload.php'(去掉../)。
服务器根目录的WordPress有自己的重写规则,会干扰子目录里Laravel的路由解析,所以得给subdirectory单独设置重写规则:
如果你用的是Apache:
在subdirectory文件夹里新建或修改.htaccess文件,内容如下:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /subdirectory/ RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
重点是RewriteBase /subdirectory/必须和你的子目录路径完全一致,同时要确保服务器开启了mod_rewrite模块。
另外,根目录WordPress的.htaccess一般不会影响子目录,但如果有冲突,检查下它的规则里有没有全局匹配的RewriteRule,避免覆盖子目录的配置。
如果你用的是Nginx:
在服务器的Nginx配置文件里,给subdirectory添加专门的location规则:
location /subdirectory { try_files $uri $uri/ /subdirectory/index.php?$query_string; }
把这个规则放在WordPress的配置之前,确保请求能正确落到Laravel的入口文件上。
打开app/config/app.php,找到url配置项,把它改成你的子目录完整地址:
'url' => 'http://example.com/subdirectory',
这个配置会影响Laravel生成的链接和路由解析,必须设置正确。
别忘了给Laravel的app/storage文件夹及其子文件夹设置写入权限(一般设为755或775,根据服务器用户组调整)。如果权限不够,Laravel没法生成缓存文件,也会导致空白页。
如果还是空白,先打开调试模式找问题:
修改app/config/app.php里的debug项:
'debug' => true,
这样就能看到具体的错误信息(比如路径错误、类加载失败等),而不是一片空白。问题解决后记得把debug改回false,避免泄露敏感信息。
内容的提问来源于stack exchange,提问作者Mohammad

