应用引擎子域重定向静态文件(HTTP 301)

时间:2015-07-23 10:27:32

标签: google-app-engine redirect

我有一个域名(让我们说)example.com,我想从裸域提供其内容(主要是静态文件 - 客户端应用)。我还想接受子域,因此它们不会因为DNS或404而以错误结束。用户通常会将www放在域前(无论出于何种原因)。

我确实在appengine控制台中设置了自定义域,裸体和*(通配符)。它显示了我需要拥有的DNS记录,因此我也将它们设置为完全相同,A / AAAA记录指向appengine IP,* CNAME指向appengine别名(googlehosted)。

我已经阅读了https://cloud.google.com/appengine/docs/domain?csw=1默认情况下的行为,我想稍微改变一下。现在可以从所有域example.com,www.example.com,blog.example.com等访问该页面。

我想要的是在不添加任何脚本处理程序的情况下将除裸域之外的所有请求重定向到裸域。

使用Apache和modrewrite解决方案很简单,因为它有RewriteCond %{HTTP_HOST}RewriteRule ^(.*)$ http://example.com/$1 [R=301,L] ...但是可以使用 app.yaml 执行此操作吗?我无法在https://cloud.google.com/appengine/docs/python/config/appconfig找到它。

我不想在javascript中重定向(不适用于图片,css等)而且我不喜欢所有文件的脚本处理程序的想法,因为恕我直言需要有一些性能损失。

1 个答案:

答案 0 :(得分:0)

因此,您似乎希望将任何子域重定向到您的裸域,而无需编写处理程序。虽然您可以在区域文件中的子域上使用CNAME通配符指向裸域“@”,但这是不可取的,因为并非每个提供程序都支持它。您可以在DNS here之类的非常标准化的系统中阅读有关此奇怪边缘案例的更多信息。

虽然您可以使用dispatch file(python doc,但其他语言类似)来捕获子域请求并将它们发送到特殊的,简化的“3xx重定向到裸域”模块,但不能托管GCE实例运行Apache的前端,您将无法使用CNAME方法更改用户的地址栏,尽管它们将被定向到您在zonefile的顶点级别指定的IP地址(A / AAAA记录)(“裸域”) ,除非你实施这样的模块。 Apache重写规则准确发送此类HTTP 3xx响应,这些响应重定向浏览器以更改其URL并请求指定的URL(在本例中为您的裸域)。