繁体   English   中英

将所有非 www 请求重定向到 bottle-py 中的 www

[英]Redirect all non-www requests to www in bottle-py

我想为主机与识别为canonical的主机不同的所有请求发出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)
    ...

我终于找到了这个 2013 SO 的答案,并根据我的需要对其进行了调整:

from bottle import Bottle, request, redirect

class RedirectToCanonicalURLPlugin():
    api = 2 
    CANONICAL_HOST = os.environ.get('CANONICAL_HOST', None)
    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())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM