我有一個基於gae的應用程序。我用webapp2框架來使用python。我需要將301重定向從www.my-crazy-domain.com到my-crazy.domain.com這樣可以消除搜索結果中的www和非www雙打。Google App Engine Python Webapp2 301從www重定向到非www域名
有沒有人有現成的解決方案?謝謝你的幫助!
我有一個基於gae的應用程序。我用webapp2框架來使用python。我需要將301重定向從www.my-crazy-domain.com到my-crazy.domain.com這樣可以消除搜索結果中的www和非www雙打。Google App Engine Python Webapp2 301從www重定向到非www域名
有沒有人有現成的解決方案?謝謝你的幫助!
我就這樣做了。
class BaseController(webapp2.RequestHandler):
"""
Base controller, all contollers in my cms extends it
"""
def initialize(self, request, response):
super(BaseController, self).initialize(request, response)
if request.host_url != config.host_full:
# get request params without domain
url = request.url.replace(request.host_url, '')
return self.redirect(config.host_full+url, permanent=True)
config.host_full包含我的主域名沒有www。解決方案是檢查基本控制器中的請求,並在域不同時進行重定向。
感謝您發佈解決方案(而不是像其他人說的那樣刪除它),這對我有幫助! :) –
我修改了一下@userlond回答不要求額外的配置價值,而不是我在使用正則表達式:
import re
import webapp2
class RequestHandler(webapp2.RequestHandler):
def initialize(self, request, response):
super(RequestHandler, self).initialize(request, response)
match = re.match('^(http[s]?://)www\.(.*)', request.url)
if match:
self.redirect(match.group(1) + match.group(2), permanent=True)
也許這是使用默認的get()請求一個簡單的方法。如果URL可能在查詢參數等地方有www,請加強正則表達式。
import re
import webapp2
class MainHandler(webapp2.RequestHandler):
def get(self):
url = self.request.url
if ('www.' in url):
url = re.sub('www.', '', url)
return self.redirect(url, permanent=True)
self.response.write('No need to redirect')
app = webapp2.WSGIApplication([
('/', MainHandler)
], debug=False)
解決方案不需要修改主應用程序,也可以使用靜態文件來創建一個在www上運行的服務。對於創建以下文件:
www.yaml
:
runtime: python27
api_version: 1
threadsafe: yes
service: www
handlers:
- url: /.*
script: redirectwww.app
redirectwww.py
:
import webapp2
class RedirectWWW(webapp2.RequestHandler):
def get(self):
self.redirect('https://example.com' + self.request.path)
app = webapp2.WSGIApplication([
('.*', RedirectWWW),
])
dipatch.yaml
:
dispatch:
- url: "www.example.com/*"
service: www
然後用gcloud app deploy www.yaml dispatch.yaml
部署。
我做了這個把戲。解決方案是[這裏](http://pastebin.com/kcFb3Jqf)。 config.host_full包含沒有www的我的主域。 解決方案是檢查基本控制器中的請求,並在域不同時進行重定向。 – userlond
既然您在任何人回答之前找到答案,甚至可以刪除問題。 – Lipis
或自己回答並接受它! –