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()