如果url中包含/#/,则PythonFlask重定向不起作用

2024-09-29 06:28:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python和Flask的新手,我需要重定向以及任意或完整的url,它可以很好地处理blow代码

但是,如果url中有“/#/”,那么它就不起作用,用户会将这些url添加到书签中,作为迁移的一部分,我需要重定向到新域

例如:

user url: http://127.0.0.1:5000/abc1/cba2/#/yyyy/2001
URL to be redirected: http://168.192.0.12:5000/abc1/cba2/#/yyyy/2001

它不工作,因为有符号,Flask只捕获url直到符号[/abc1/cba2/],因此重定向失败

我如何解决这个问题

from flask import Flask, redirect
import json

def create_app():
    app = Flask(__name__)

    @app.route('/', defaults={'arbitrary': ''}, methods=['GET'])
    @app.route('/<path:arbitrary>')
    def red(arbitrary):
        print (arbitrary)
        url_substring = "/yyyy/"
        if url_substring in arbitrary:
            new_path = 'https://xxxx.com/' + arbitrary
            print (new_path)
            return redirect(new_path, code=302)
        else: 
            return redirect("https://xxxx.com", code=302)

Tags: pathimportapphttpurlflasknewdef
3条回答

根据http规范,#签名后的内容只能由客户端访问。在您的情况下,您可以在从客户端加载一个示例页面后阅读省略的部分,该页面在#之后发送带有省略内容的ajax请求

请看这里以供参考https://stackoverflow.com/a/9384407/4374376

片段Url的[在#之后的任何内容]都不会发送到服务器端,因此JS是唯一的选项,为此我使用了NodeJS[服务器端]和JS

一旦客户点击书签URL,它就会到达NodeJS,从那里它就会被路由到HTML页面,让JS获取片段URL并相应地重定向

下面的JS将获得片段URL

var urlAddress=document.URL.substr(document.URL.indexOf(“#”)+1)

您知道#符号在URL中的含义吗

如果你必须包括它,那么你必须避开这个标志

URL应该是:http://127.0.0.1:5000/abc1/cba2/%23/yyyy/2001

%23表示#符号

相关问题 更多 >