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

如何修复Python URL重定向、伪装及访问日志脚本故障?

问题描述

我用requests和Flask写了个Python脚本,想实现URL重定向、伪装功能,同时记录指定URL的访问情况。设计目标是:读取data.csv里的每条URL映射,在服务器上生成对应重定向路径名的txt文件,每次访问都记录访问详情。

目前脚本在cPanel的Python应用部署工具里运行,看起来没有报错,但既不跳转到目标URL,也不记录任何访问信息。

更新:
在stderr日志中发现以下错误:

[UID:1566][760944] Child process with pid: 761215 was killed by signal: 15, core dump: 0......

前端现在显示(可能是缓存问题):

Internal Server Error 500

求解决思路。

代码文件

.htaccess

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/(.*)$
RewriteRule ^(.*)$ $main.py [L]

app.py

import os
import datetime
import requests
from flask import Flask, request, redirect

app = Flask(__name__)

# Load URL redirects from data.txt file

def load_redirects():
    redirects = {}
    with open('data.txt', 'r') as file:
        for line in file:
            key, value = line.strip().split('|')
            redirects[key] = value
    return redirects

# Log visitor information to TXT file

def log_visitor(url, ip, city, country):
    timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    log_entry = f"{timestamp} | IP: {ip} | City: {city} | Country: {country}\n"
    with open(f"{url}.txt", 'a') as file:
        file.write(log_entry)

# Get visitor's IP address and geolocation

def get_visitor_info():
    ip = request.headers.get('X-Forwarded-For', request.remote_addr)
    response = requests.get(f"http://ip-api.com/json/{ip}")
    data = response.json()
    city = data.get('city', 'Unknown')
    country = data.get('country', 'Unknown')
    return ip, city, country

# Route for handling URL redirects

@app.route('/<path:url>')
def redirect_url(url):
    redirects = load_redirects()
    if url in redirects:
        ip, city, country = get_visitor_info()
        log_visitor(url, ip, city, country)
        return redirect(redirects[url])
    else:
        return "URL not found"


if __name__ == '__main__':
    app.run()

data.csv

Ebay|https://ebay.com/
Amazon|https://amazon/
解决思路
  • 修正.htaccess的脚本文件名:当前RewriteRule里写的是$main.py,但实际入口脚本是app.py,这会导致请求无法找到正确的处理文件,直接触发500错误。修改后的规则:
    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^/(.*)$
    RewriteRule ^(.*)$ app.py [L]
    
  • 统一重定向规则的文件名:脚本里加载的是data.txt,但你实际用的是data.csv,这会导致加载规则时抛出文件不存在的异常,引发500错误。要么把data.csv改名为data.txt,要么修改load_redirects函数里的文件名:
    with open('data.csv', 'r') as file:
    
  • 处理子进程被终止的问题(signal 15):signal 15是正常的终止信号,大概率是cPanel的进程管理因为资源限制或超时杀死了进程,优化方向:
    • 给requests.get添加超时参数,避免外部请求卡住超时:
      response = requests.get(f"http://ip-api.com/json/{ip}", timeout=5)
      
    • 缓存重定向规则,不要每次请求都读取文件,减少IO操作:
      # 在全局提前加载一次
      redirects = load_redirects()
      
      @app.route('/<path:url>')
      def redirect_url(url):
          global redirects
          if url in redirects:
              # 后续逻辑不变
      
  • 检查文件写入权限:cPanel部署的Python应用可能没有当前目录的写入权限,导致无法创建日志txt文件。可以指定绝对路径存储日志,或者联系主机商确认目录权限,确保应用用户有写入权限。
  • 调整Flask运行方式:不要用app.run()的开发服务器,cPanel的Python部署工具通常要求用WSGI模式运行,确保部署时指定了正确的入口(比如app.py里的app对象)。
  • 开启详细日志排查:在app.py开头添加日志配置,获取更详细的错误信息:
    import logging
    logging.basicConfig(level=logging.DEBUG)
    

内容的提问来源于stack exchange,提问作者Daniel Mizr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:50:16