如何将Strapi根路径301永久重定向到/admin后台登录页
Strapi根路由301重定向到/admin不生效的解决方案
你之前的配置不生效核心原因是:./admin目录下的自定义中间件仅作用于带/admin前缀的管理后台路由,根路径/不属于admin路由的处理范围,因此不会触发你写的重定向逻辑。
方案1:使用全局自定义中间件(适用Strapi v4,推荐)
步骤1:创建全局中间件文件
路径:./src/middlewares/root-redirect.js
代码内容:
module.exports = (config, { strapi }) => { return async (ctx, next) => { // 匹配GET请求的根路径 if (ctx.path === '/' && ctx.method === 'GET') { // 设置301永久重定向状态码,默认redirect是302临时重定向 ctx.status = 301; return ctx.redirect(strapi.config.get('server.admin.url', '/admin')); } await next(); }; };
步骤2:注册全局中间件
修改全局中间件配置文件,路径:./config/middlewares.js,将你刚写的中间件放在数组最顶部,优先级高于静态资源处理中间件,避免被默认静态页拦截:
module.exports = [ './src/middlewares/root-redirect', // 放在第一行 'strapi::errors', 'strapi::security', 'strapi::cors', 'strapi::poweredBy', 'strapi::logger', 'strapi::query', 'strapi::body', 'strapi::session', 'strapi::favicon', 'strapi::public', ];
配置完成后重启Strapi服务即可生效。
方案2:Strapi v3适配方案
如果是v3版本,创建全局中间件路径为./middlewares/redirect/index.js,代码如下:
module.exports = strapi => { return { initialize() { strapi.router.get('/', async (ctx) => { ctx.status = 301; ctx.redirect(strapi.config.get('server.admin.url', '/admin')); }); } }; };
然后修改./config/middleware.js,配置中间件加载,注意要放在serve中间件之前:
module.exports = { load: { before: ['redirect', 'router', 'serve'], }, settings: { redirect: { enabled: true, }, }, };
内容的提问来源于stack exchange,提问作者Doug Niccum
相关产品推荐
相关产品推荐

