【问题标题】:Redirect all non-www requests to www in bottle-py将所有非 www 请求重定向到 bottle-py 中的 www
【发布时间】:2022-01-09 18:14:30
【问题描述】:

我想为所有具有不同于标识为规范的主机的主机的请求发出301重定向。

类似于以下内容,无需在每条路线中复制它:

CANONICAL_HOST = 'www.example.com'
@app.route('/')
def home():    
    if request.urlparts.netloc != CANONICAL_HOST:
        redirect_url = request.urlparts._replace(netloc=CANONICAL_HOST).geturl()
        return redirect(redirect_url, 301)
    ...

【问题讨论】:

  • 只要确保我理解你的问题。您的重定向工作正常,但您目前必须为每条路线重复上述代码。您的问题是关于如何避免这种重复,对吗?而不是重定向本身。
  • @ron rothman 正确,这是为了避免重复

标签: python bottle


【解决方案1】:

我终于找到了this 2013 SO's answer,并根据我的需要对其进行了调整:

from bottle import Bottle, request, redirect

class RedirectToCanonicalURLPlugin():
    api = 2 
    CANONICAL_HOST = os.environ.get('CANONICAL_HOST')
    def apply(self, callback, route):
        def wrapper(*args, **kwargs):
            return (callback(*args, **kwargs)
                if request.urlparts.netloc == self.CANONICAL_HOST 
                else self._redirect())
        return wrapper  
              
    def _redirect(self):
        return redirect(request.urlparts
            ._replace(netloc=self.CANONICAL_HOST).geturl(), 301)

app = Bottle()
app.install(RedirectToCanonicalURLPlugin())

【讨论】:

    猜你喜欢
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2013-04-03
    • 2015-04-20
    • 2015-02-25
    • 1970-01-01
    • 2019-03-08
    相关资源
    最近更新 更多