尝试使用web2py启用letsencrypt。作为其中的一部分,我可能需要为像www.example.com/.well-known/acme-challenge/<some long string>
这样的网址创建路线
当我测试这个时,我注意到以下路由有效:
('/\.well-known/acme-challenge/test.html',
'/some_app/static/well-known/acme-challenge/test.html'),
虽然这条几乎相同的路线不是:
('/\.well-known/acme-challenge/test.html',
'/some_app/static/.well-known/acme-challenge/test.html'),
这两条路线的唯一区别在于,在后者中,在元组的第二个元素中,.well-known
有一个领先时期,而前一条路线有well-known
没有一个时期。
注意我确实尝试像\.well-known
那样逃避时期,但它也不起作用。
为什么具有领先期限的路线不起作用?我该如何解决?
即使它是静态URL,紧接在/static/
之后的路径段也被解释为控制器函数,因此期望它是有效的Python标识符(用于匹配路径的该部分的正则表达式是\w+
)。
请注意,您可以考虑将Web服务器配置为直接返回响应(例如,配置Nginx以执行此操作很容易),而不是让web2py提供letsencrypt响应。
我没有遇到直接解决期限问题的问题(正如Anthony web2py所提到的那样,需要一个有效的python标识符)
但是,为了解决使用Let的加密的具体问题,我确实按照Anthony的建议在网络服务器中处理它。我正在使用Apache,在我的httpd.conf中我添加了:
LoadModule alias_module modules/mod_alias.so
Alias "/.well-known/" "/var/www/html/somedirectory/.well-known/"
注意Alias将自动映射url路径之后的任何内容。上面的Alias示例:
example.com/.well-known/something/hello
将映射到
/var/www/html/somedirectory/.well-known/something/hello