PythonAnywhere部署网站:HTTPS无www域名无法访问求助
解决PythonAnywhere+Namecheap的HTTPS重定向问题
1. 在PythonAnywhere添加裸域(website.com)的Web应用
- 登录PythonAnywhere后台,进入「Web」标签页
- 找到已配置的
www.website.com应用,点击页面中的「Add a domain」按钮 - 输入裸域
website.com,确认选择和www.website.com相同的代码目录(保证是同一个站点) - 提交后,PythonAnywhere会自动为该域名申请Let's Encrypt SSL证书,等待1-2分钟生效即可
2. 配置全局强制HTTPS+统一域名跳转(解决加载慢问题)
根据你的Web框架类型,选择对应配置方式:
通用WSGI应用(适配大部分框架)
打开Web应用的「WSGI configuration file」编辑页面,在原有代码前添加以下重定向逻辑:
from werkzeug.middleware.proxy_fix import ProxyFix from werkzeug.middleware.redirect import RedirectMiddleware def enforce_https_www(environ, start_response): host = environ.get('HTTP_HOST', '') scheme = environ.get('wsgi.url_scheme', 'http') # 检查是否是HTTPS且带www前缀 if scheme != 'https' or not host.startswith('www.'): # 构造目标URL target_url = f'https://www.website.com{environ.get("PATH_INFO", "")}' if environ.get('QUERY_STRING'): target_url += f'?{environ.get("QUERY_STRING")}' # 返回301永久重定向 start_response('301 Moved Permanently', [ ('Location', target_url), ('Content-Type', 'text/plain') ]) return [b'Redirecting to secure www domain'] # 符合要求则继续处理原请求 return app(environ, start_response) # 适配PythonAnywhere的反向代理,确保能正确识别HTTPS app = ProxyFix(app, x_proto=1, x_host=1) # 挂载重定向中间件 app = RedirectMiddleware(app, {'': enforce_https_www})
注意:将代码中的
app替换为你实际应用的WSGI实例名称(比如Flask的app、Django的application)
Django框架
在项目的settings.py中修改以下配置:
# 允许两个域名访问 ALLOWED_HOSTS = ['website.com', 'www.website.com'] # 强制HTTPS跳转 SECURE_SSL_REDIRECT = True # 适配PythonAnywhere反向代理,正确识别HTTPS请求 SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') # 信任HTTPS域名的CSRF请求 CSRF_TRUSTED_ORIGINS = ['https://website.com', 'https://www.website.com']
Flask框架
在主应用文件中添加:
from flask import Flask, redirect, request app = Flask(__name__) # 全局重定向装饰器 @app.before_request def enforce_https_www(): # 检查协议和域名 if request.scheme != 'https' or not request.host.startswith('www.'): # 构造目标URL target_url = f'https://www.website.com{request.full_path}' return redirect(target_url, code=301) # 适配PythonAnywhere反向代理 from werkzeug.middleware.proxy_fix import ProxyFix app.wsgi_app = ProxyFix(app.wsgi_app, x_proto=1, x_host=1)
3. 调整Namecheap的DNS设置
- 登录Namecheap后台,进入域名的「Advanced DNS」配置页
- 将裸域
website.com的A记录设置为PythonAnywhere提供的服务器IP(和www.website.com的A记录一致) - 移除之前设置的URL转发规则,改用DNS A记录直接指向IP,避免转发导致的延迟
完成以上步骤后,所有访问方式(http/https、裸域/www)都会自动跳转到https://www.website.com,解决加载慢和裸域HTTPS无法访问的问题。
内容的提问来源于stack exchange,提问作者LegendCoder
相关产品推荐
相关产品推荐

