如何解决Statamic多站点路由问题?页面访问报错求助
解决Statamic多站点下页面URL访问报错问题
环境信息
你的Pages集合配置:
title: Pages sites: - TypischAtopisch - TypischHeuschnupfen - TypischNeurodermitis propagate: false template: default layout: layout revisions: false route: '{parent_uri}/{slug}/' sort_dir: asc structure: root: true
页面文件夹为每个站点目录下独立的pages结构(如TypischAtopisch/pages/community.md),期望通过/community访问对应页面但报错。
排查与解决步骤
1. 确认页面的站点归属
由于propagate: false,每个页面必须明确绑定到对应站点。打开community.md的front-matter,检查是否包含站点指定字段:
--- title: Community site: TypischAtopisch # 替换为你要访问的站点handle slug: community ---
缺少site字段会导致页面无法被对应站点识别,路由匹配失败。
2. 调整集合路由规则
当前路由{parent_uri}/{slug}/会生成带尾斜杠的URL(如/community/),与你期望的/community不符。修改集合路由配置为:
route: '{parent_uri}/{slug}'
3. 验证站点基础配置
进入config/sites.php,确认目标站点的URL配置正确:
return [ 'sites' => [ 'typischatopisch' => [ 'name' => 'Typisch Atopisch', 'handle' => 'TypischAtopisch', 'locale' => 'de_DE', 'url' => '/', // 主站点设为根路径;子站点需对应前缀如'/heuschnupfen' ], // 其他站点配置... ], ];
如果是子站点,访问URL需要加上站点前缀(如/heuschnupfen/community)。
4. 检查服务器重写规则
Statamic依赖URL重写将请求转发到index.php,确保服务器配置正确:
- Apache:根目录
.htaccess需包含:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
- Nginx:server配置中添加:
location / { try_files $uri $uri/ /index.php?$query_string; }
缺少重写规则会直接返回404。
5. 清理缓存并刷新路由
执行以下命令清理缓存、更新路由:
php please cache:clear php please route:clear
6. 确认页面结构层级
由于集合开启structure: root: true,需确保community页面是根层级节点(无父页面)。可在Statamic控制面板的「Collections」→「Pages」中检查页面结构,若页面有父节点,路由会自动带上父页面URI,导致URL不符合预期。
内容的提问来源于stack exchange,提问作者david dami
相关产品推荐
相关产品推荐

