You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 16:08:14