如何为 google AppEngine Webapp2 Url 进行 SEO Url 更改和重定向?
How to do SEO Url changes and Redirects for google AppEngine Webapp2 Urls?
我正在将我公司的网站移动到 google 应用引擎,它主要是静态内容,其中包含使用 python 生成的日期等小部分。我已经正确设置了所有内容,并且它在 App Engine 上运行良好。现在我想做一些与 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
。
I have added both www and non www mappings at the app engine developer console, the site is currently accessible from both www and non www urls.but I only want non www
version
- 当 url 有尾部斜杠时,将其剥离并发送到没有尾部斜杠的版本。
Right now domain.com/discover
works fine but domain.com/discover/
ends up in 404 .
我对 python webapps 没有太多经验,我的背景主要是 apache/nginx
服务器和 php
。 AppEngine 是否有类似 htaccess rules
或 nginx rewrites
的东西?
您可以首先捕获对 "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
@Mihail 回答有助于正确解决问题。在他的回答中添加一些细节。
为了解决第二个问题 [尾部斜杠] ,如果你尝试 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)
我正在将我公司的网站移动到 google 应用引擎,它主要是静态内容,其中包含使用 python 生成的日期等小部分。我已经正确设置了所有内容,并且它在 App Engine 上运行良好。现在我想做一些与 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
。
I have added both www and non www mappings at the app engine developer console, the site is currently accessible from both www and non www urls.but I only want
non www
version
- 当 url 有尾部斜杠时,将其剥离并发送到没有尾部斜杠的版本。
Right now
domain.com/discover
works fine butdomain.com/discover/
ends up in 404 .
我对 python webapps 没有太多经验,我的背景主要是 apache/nginx
服务器和 php
。 AppEngine 是否有类似 htaccess rules
或 nginx rewrites
的东西?
您可以首先捕获对 "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
@Mihail 回答有助于正确解决问题。在他的回答中添加一些细节。
为了解决第二个问题 [尾部斜杠] ,如果你尝试 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)