Google app engine 在本地主机上导航到/_ah/admin会产生未知的404错误
我目前正在将我的GAE应用程序移植到Python2.7上,遇到了一些令人兴奋的事情,我慢慢地一次解决一个(您好,别名为simplejson库!)。然而,我目前无法解释这个特殊问题 每当我导航到管理控制台时(http://localhost:8080/_ah/admin),我得到了404页。这本身就很奇怪(之前工作得很好),但它也不是我的自定义404页面。这让我觉得这是基于内置的处理程序,但我不确定原因是什么 其他有趣的事实:Google app engine 在本地主机上导航到/_ah/admin会产生未知的404错误,google-app-engine,python-2.7,Google App Engine,Python 2.7,我目前正在将我的GAE应用程序移植到Python2.7上,遇到了一些令人兴奋的事情,我慢慢地一次解决一个(您好,别名为simplejson库!)。然而,我目前无法解释这个特殊问题 每当我导航到管理控制台时(http://localhost:8080/_ah/admin),我得到了404页。这本身就很奇怪(之前工作得很好),但它也不是我的自定义404页面。这让我觉得这是基于内置的处理程序,但我不确定原因是什么 其他有趣的事实: 在我的app.yaml或其他地方没有尝试处理/_ah/* 除了WSG
- 在我的app.yaml或其他地方没有尝试处理/_ah/*
- 除了WSGI处理程序的常用脚本之外,my app.yaml中没有任何更改
- 不使用联合登录
- 随着时间的推移,我几乎打开了所有的内置设备
- 应用程序部署正确且无问题
- 我在OSX上使用GAE启动器(虽然很小,但它确实有一些奇怪的地方)
因此,我最终找到了一些在Python2.5中工作得非常好的东西,但在Python2.7中仅使用dev_appserver时出现了问题
为了打开和关闭维护模式,我们通过直接更改
app.router
字段,在WSGI实例中重新分配路由以指向一组新的URL。通过检查应用程序版本禁用此代码路径可以使/\u ah/admin
正常工作。如果您找到此答案,并且正在使用或更高版本,默认URL已从localhost:8080/\u ah/admin
更改为localhost:8000
由于在web.xml
文件中定义了URL筛选器,我遇到了相同的问题:
<filter>
<filter-name>filter</filter-name>
<filter-class>com.example.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
上面代码中读取|path.startsWith(“/_-ah”)
的部分解决了我的问题,因为过滤器必须允许以/_-ah
开头的路径不变地通过
我需要过滤器,这样Jersey就可以在所有REST路径前面都没有
/res
或web.xml
中指定的任何内容的情况下工作。服务器是否记录了失败的/\u ah/admin请求?我假设在该端口上对应用程序的其他请求都成功了?是的,但不是404。它与任何其他成功的页面都无法区分。端口上的其他请求确实成功。我们的404处理程序非常独特,因为它将异常级别的信息记录为页面呈现的一部分。您的应用程序中是否有对django的任何引用?我见过一些人报告错误,通常是因为安装了错误版本的django。事实上,我是这样做的。然而,我确实在“库”下设置了它,以使用django 1.2。主要是电子邮件正则表达式和其他一些东西。Dan道歉说,唯一没有被使用的是模板(现在是Mako)。当我说“不是404”时,我指的是我不习惯的。如日志所示,错误代码肯定是404
<filter>
<filter-name>filter</filter-name>
<filter-class>com.example.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String path = req.getRequestURI().substring(req.getContextPath().length());
if (path.equals("/")) { // Welcome path
request.getRequestDispatcher("/res/index").forward(request, response);
} else if (path.startsWith("/static") || path.startsWith("/_ah")) {
// Static content or internal and admin stuff
chain.doFilter(request, response); // Goes to default servlet.
} else { // Jersey servlet controller
request.getRequestDispatcher("/res" + path).forward(request, response);
}
}