如何配置app.yaml文件以将所有网址重定向到其他网址?例如,我希望http://test.appspot.com/hello或http://test.appspot.com/hello28928723重定向到http://domain.com。
我目前只提供静态文件。这是我的app.yaml文件:
application: testapp
version: 1
runtime: python
api_version: 1
handlers:
- url: (.*)/
static_files: static\1/index.html
upload: static/index.html
- url: /
static_dir: static
答案 0 :(得分:40)
Webapp2有一个内置的重定向处理程序
无需滚动自己的处理程序; webapp2已经附带一个。
application = webapp2.WSGIApplication([
webapp2.Route('/hello', webapp2.RedirectHandler, defaults={'_uri':'http://domain.com'}),
webapp2.Route('/hello28928723', webapp2.RedirectHandler, defaults={'_uri':'http://domain.com'}),
], debug=False)
_uri参数是RedirectHandler类用于定义目标的内容。需要很多Google Fu才能找到相关文档,但它在我的应用程序中运行完美。
<强>更新强>
我认为你已经意识到这一点,但你需要改变你的全能路线:
- url: /
static_dir: static
To(python27 version):
- url: /.*
script: main.application
或者:( pre python27版本)
- url: /.*
script: main.py
main.py是包含请求处理程序+路由的文件。
注意:由于静态文件的性质,没有静态方法来处理GAE上的重定向。基本上,单独在app.yaml中无法进行重定向。
答案 1 :(得分:8)
您需要的所有内容(替换app-id
,http://example.com
):
app.yaml
:
application: app-id
version: 1
runtime: python27
api_version: 1
threadsafe: false
handlers:
- url: /.*
script: main.py
main.py
:
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
class AllHandler(webapp.RequestHandler):
def get(self):
self.redirect("http://example.com", True)
application = webapp.WSGIApplication([('/.*', AllHandler)])
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
答案 2 :(得分:5)
您可以使用python处理程序轻松地重定向所有请求。像
这样的东西class FormHandler(webapp.RequestHandler):
def post(self):
if processFormData(self.request):
self.redirect("http://domain.com")
答案 3 :(得分:4)
这是一个将执行重定向的python脚本:
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
class MainPage(webapp.RequestHandler):
def get(self, path):
self.redirect("http://example.com", permanent=True)
def head(self, path):
self.redirect("http://example.com", permanent=True)
application = webapp.WSGIApplication(
[
(r'^(.*)', MainPage)
])
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
答案 4 :(得分:3)
如果您想要仅限静态文件的方式来执行“重定向”,请执行以下操作:
在app.yaml中,把它作为catch-all,放在文件的末尾:
- url: /.*
static_files: root/redirect.html
upload: root/redirect.html
然后在root / redirect.html文件中输入:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="0;URL=/" />
<script>
location.replace("/");
</script>
</head>
<body></body>
</html>
此示例将所有未知URL重定向到根目录(即/)。如果您想要其他网址,只需在适当的位置替换http://mydomain.com。
答案 5 :(得分:0)
重复Evan的回答,重定向所有可以使用正则表达式的请求来执行以下操作:
import webapp2
from webapp2_extras.routes import RedirectRoute
app = webapp2.WSGIApplication([
RedirectRoute('/<:.*>', redirect_to='/')
], debug=False)
官方文档请查看:
https://webapp-improved.appspot.com/api/webapp2_extras/routes.html
https://webapp-improved.appspot.com/api/webapp2.html#webapp2.Route.init
答案 6 :(得分:0)
上一个答案中提到的webapp2(webapp2.RedirectHandler)的重定向处理程序不适用于帖子请求,因为它不包含post方法(请参阅https://github.com/GoogleCloudPlatform/webapp2/blob/master/webapp2.py),因此您需要自己动手python处理程序如果关注帖子。如下所示:
import webapp2
class MainPage(webapp2.RequestHandler):
def post(self):
self.redirect('http://example.com')
application = webapp2.WSGIApplication([
('/.*', MainPage)
], debug=False)