Flutter URL策略不适用于Web发布



Flutter web调试在手动输入url时工作良好,我使用的是"pathUrlStrategy;例如http://localhost:14143/secondPage.但在发布模式下尝试同样的操作,例如只返回404页http://localhost/secondPage使用xampp、github页面时,以及尝试http://localhost/#/secondPage它重定向到主页http://localhost/home.

当你在prod中运行你的flutter web的构建二进制文件时(例如在python-http服务器上(,你需要配置web服务器来将你的其他路径路由到你的flutter web的index.html。

有关详细信息,请参阅配置web服务器。

使用python3http服务器示例脚本:

import http.server
import socketserver
class Handler(http.server.SimpleHTTPRequestHandler):
def __init__(self, *args, **kwargs):
super().__init__(*args, directory=".", **kwargs)
def do_GET(self):
if self.path == '/':
self.path = '/index.html'
elif self.path == '/home':
self.path = '/index.html'
elif self.path == '/secondPage':
self.path = '/index.html'
return http.server.SimpleHTTPRequestHandler.do_GET(self)

with socketserver.TCPServer(("0.0.0.0", 8080), Handler) as httpd:
print("web server running..")
httpd.serve_forever()

我已经改进了这个答案。

您可以将web文件夹添加到包含.py脚本的文件的根目录中。为此,您必须在flutter项目中运行flutter build web --release。然后,您可以将web文件夹从../build/web复制到包含.py文件的另一个文件夹。

__init__中的directory参数更改为已复制的web文件夹的位置。运行脚本并在浏览器中打开localhost:8080将运行项目构建。

注意:web文件夹可以是任何flutter构建,表单代码魔术,或者来自项目本身。

import http.server
import socketserver

class Handler(http.server.SimpleHTTPRequestHandler):
def __init__(self, *args, **kwargs):
super().__init__(*args, directory="../script/web", **kwargs)
paths = ["/", "/first-page", "/second-page"]
def do_GET(self):
if self.paths.__contains__(self.path):
self.path = '/index.html'
return http.server.SimpleHTTPRequestHandler.do_GET(self)

with socketserver.TCPServer(("localhost", 8080), Handler) as httpd:
print("web server running..")
httpd.serve_forever()

相关内容

  • 没有找到相关文章

最新更新