Laravel中/wp-blog跳转WordPress子目录404问题求助
咱们先拆解下你遇到的问题:你的WordPress部署在Laravel根目录的sricargo-blog子文件夹里,但Laravel的Web入口是public目录,直接通过路由跳转不仅可能路径指向错误,还会因为Laravel的路由拦截机制,导致服务器无法正确识别WordPress的请求,最终出现404。下面给你几个针对性的解决方案:
1. 先修正路由跳转的目标路径
你当前路由里Redirect::to('...')的目标地址需要指向WordPress后台的正确路径。WordPress后台默认地址是/sricargo-blog/wp-admin,先把路由写对:
// routes/web.php use Illuminate\Support\Facades\Redirect; Route::get('/wp-blog', function () { // 直接跳转到WordPress后台面板 return Redirect::to('/sricargo-blog/wp-admin'); });
但这一步只是解决了跳转的目标地址问题,核心的404问题还需要调整服务器配置,因为sricargo-blog不在Laravel的public目录下,默认会被Laravel的路由规则拦截。
2. 调整服务器配置(Apache/Nginx)
如果你用Apache
编辑Laravel根目录下的.htaccess文件(没有的话直接创建),添加规则让sricargo-blog目录的请求绕过Laravel,直接访问对应文件夹:
<IfModule mod_rewrite.c> # 优先处理sricargo-blog的请求,不经过Laravel RewriteRule ^sricargo-blog/(.*)$ sricargo-blog/$1 [L] # 下面保留Laravel默认的rewrite规则 RewriteEngine On RewriteRule ^(.*)$ public/$1 [L] </IfModule>
同时要确保sricargo-blog文件夹有正确的权限,服务器用户(比如www-data)需要有读取和执行权限。
如果你用Nginx
编辑你的Nginx站点配置文件,在location /块之前添加专门处理sricargo-blog的规则:
server { # 你的域名、根目录等基础配置... # 单独处理WordPress文件夹的请求 location /sricargo-blog { alias /path/to/your/laravel/root/sricargo-blog; # 替换成你的Laravel根目录绝对路径 index index.php index.html; # WordPress的URL重写规则 try_files $uri $uri/ /sricargo-blog/index.php?$args; # 处理PHP请求 location ~ \.php$ { fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # 根据你的PHP版本调整路径 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include fastcgi_params; } } # Laravel的默认请求处理规则 location / { try_files $uri $uri/ /index.php?$query_string; } # 其他PHP相关配置... }
修改完成后,记得重启Apache或Nginx服务生效。
3. 更简单的替代方案:把WordPress移到public目录
如果不想折腾服务器配置,可以直接把sricargo-blog文件夹移动到Laravel的public目录下,这样服务器会直接识别到这个文件夹,不需要额外配置规则。
移动后目录结构变为:public/sricargo-blog
然后路由修改为:
Route::get('/wp-blog', function () { return Redirect::to('/sricargo-blog/wp-admin'); });
这种方式更省心,适合不想调整服务器规则的场景。
4. 先验证WordPress本身的可访问性
在调整路由和服务器配置之前,先直接访问http://你的域名/sricargo-blog,看看能不能打开WordPress首页。如果直接访问也404,那说明服务器根本没识别到这个文件夹,先解决这个基础问题,再处理跳转逻辑。
内容的提问来源于stack exchange,提问作者Kasun

