【问题标题】:How to do SEO Url changes and Redirects for google AppEngine Webapp2 Urls?如何为 google AppEngine Webapp2 Urls 进行 SEO Url 更改和重定向?
【发布时间】:2015-05-03 11:22:15
【问题描述】:

我正在将我的公司网站迁移到谷歌应用引擎,它的大部分内容都是静态内容,其中包含使用 python 生成的日期等小部分。我已经正确设置了所有内容,并且在应用引擎上运行良好。现在我想做一些与 SEO 相关的 URL 更改。

这是现在为网站提供服务的代码行。

app = webapp2.WSGIApplication([
    ('/', IndexPage),
    ('/discover', DiscoverPage),
    ('/about', AboutPage),
    ('/help', HelpPage),
    ('/terms-and-privacy', TermsPage)
], debug=True)

为每个页面定义了这样的类。

class DiscoverPage(webapp2.RequestHandler):
    def get(self):
        template_values = {
            'bodyclass': 'discover',
        }
        template = JINJA_ENVIRONMENT.get_template('discover.html')
        self.response.write(template.render(template_values))

现在我想要实现的目标是:

  • 当从www.domain.com访问网站时,我想将其重定向到domain.com

我在应用引擎开发者控制台添加了 www 和非 www 映射,该站点目前可以从 www 和非 www url 访问。但我只想要 non www 版本

  • 当 URL 有斜杠时,将其剥离并发送到不带斜杠的版本。

现在 domain.com/discover 可以正常工作,但 domain.com/discover/ 会以 404 结束。

我对 python webapps 没有太多经验,我的背景主要是 apache/nginx 服务器和 phpAppEngine 是否有类似 htaccess rulesnginx rewrites 的信息?

【问题讨论】:

    标签: python google-app-engine webapp2


    【解决方案1】:

    您可以先捕获对“www”子域的所有请求:

    from webapp2_extras.routes import DomainRoute
    
    app = webapp2.WSGIApplication([
    
        DomainRoute('www.domain.com', [
                webapp2.Route(r'/<:.*>', handler=RedirectWWW),
        ]),
    
        ('/', IndexPage),
        ('/discover', DiscoverPage),
        ('/about', AboutPage),
        ('/help', HelpPage),
        ('/terms-and-privacy', TermsPage)
    ], debug=True)
    

    使用将 www 部分替换为裸域的处理程序:

    class RedirectWWW(webapp2.RequestHandler):
        def get(self, *args, **kwargs):
            url = self.request.url.replace(self.request.host, 'domain.com')
            return self.redirect(url, permanent=True)
    
        def post(self, *args, **kwargs):
            return self.get()
    

    关于第二个问题,您可以在此处阅读strict_slash 参数:https://webapp-improved.appspot.com/api/webapp2_extras/routes.html

    【讨论】:

      【解决方案2】:

      @Mihail 回答有助于正确解决问题。为他的答案添加一些细节。

      为了解决第二个问题 [trailing slashes] ,如果你尝试strict_slash,你最终可能会得到这个error 或其他一些。

      ValueError: Routes with strict_slash must have a name.
      

      所以记录我让它工作的步骤

      RedirectRoute 导入代码

      from webapp2_extras.routes import RedirectRoute
      

      使用名称参数相应地更改代码

      app = webapp2.WSGIApplication([
          DomainRoute('www.'+SITE_DOMAIN, [
                  webapp2.Route(r'/<:.*>', handler=RedirectWWW),
          ]),
           RedirectRoute('/', IndexPage,strict_slash=True,name="index"),
           RedirectRoute('/discover', DiscoverPage,strict_slash=True,name="discover"),
           RedirectRoute('/about', AboutPage,strict_slash=True,name="about"),
           RedirectRoute('/help', HelpPage,strict_slash=True,name="help"),
           RedirectRoute('/terms-and-privacy', TermsPage,strict_slash=True,name="terms")
      ], debug=True)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-01
        • 1970-01-01
        • 2015-01-07
        • 1970-01-01
        • 2012-05-22
        • 2014-01-27
        • 1970-01-01
        相关资源
        最近更新 更多