Google AppEngine通配符子域名优先级及dispatch.xml路由规则问询
当然可以实现你的需求!而且dispatch.xml本身就自带你想要的优先级匹配机制——已明确配置的特定子域名会被优先匹配,只有当请求的子域名没在规则里找到对应项时,才会自动路由到默认模块。
我给你写一个符合需求的具体配置,再帮你拆解下逻辑:
完整的dispatch.xml配置示例
<?xml version="1.0" encoding="UTF-8"?> <dispatch> <!-- 第一条规则:精准匹配m1.myapp.com,路由到Module1 --> <rule> <domain>m1.myapp.com</domain> <module>Module1</module> </rule> <!-- 第二条规则:精准匹配m2.myapp.com,路由到Module2 --> <rule> <domain>m2.myapp.com</domain> <module>Module2</module> </rule> <!-- 最后一条规则:匹配所有未被上面覆盖的myapp.com子域名 --> <rule> <domain>*.myapp.com</domain> <module>DefaultModule</module> </rule> </dispatch>
优先级匹配逻辑详解
Google App Engine 处理dispatch.xml规则时,是按从上到下的顺序依次匹配的:
- 当一个请求进来(比如
m1.myapp.com),系统会先检查第一条规则,发现域名完全匹配,直接把请求转发给Module1,不会再往下看后面的规则。 - 如果请求的是
xyz.myapp.com这种未被前两条规则覆盖的子域名,系统会一路检查到最后一条通配符规则,匹配成功后路由到DefaultModule。
额外注意事项
- 通配符
*.myapp.com会匹配所有myapp.com下的子域名,包括四级子域名(比如test.xyz.myapp.com),目前GAE的dispatch.xml不支持更细粒度的层级限制,只能用这种全局子域名匹配。 - 一定要把精准匹配的规则放在通配符规则前面,否则如果把
*.myapp.com放在最前面,所有请求都会直接走默认模块,前面的特定子域名规则就失效了。
内容的提问来源于stack exchange,提问作者RCM SAS
相关产品推荐
相关产品推荐

