我在Flutter Web中有一個項目,我想為它創建一個純HTML的登錄頁面用于SEO目的。我的目的是創建一個服務器,為具有更高優先級的靜態文件提供服務,如果靜態HTML文件在請求中返回錯誤,則應將構建的flutter Web項目用作回退。我在Golang中創建了這個服務器:package mainimport ( "net/http")func main() { http.ListenAndServe(":2000", professionalServer{})}type professionalServer struct{}var flutterServer = http.FileServer(http.FileSystem(http.Dir("../../../professional/build/web")))var staticServer = http.FileServer(http.FileSystem(http.Dir("../../../professional/landing-page/dist")))func (professionalServer) ServeHTTP(w http.ResponseWriter, r *http.Request) { res := preflightResponseWriter{OutputData: make(map[string]int)} staticServer.ServeHTTP(res, r) if res.OutputData["status_code"] == 200 { staticServer.ServeHTTP(w, r) } else { flutterServer.ServeHTTP(w, r) }}type preflightResponseWriter struct { OutputData map[string]int}func (preflightResponseWriter) Header() http.Header { return http.Header{}}func (preflightResponseWriter) Write([]byte) (int, error) { return 0, nil}func (p preflightResponseWriter) WriteHeader(statusCode int) { p.OutputData["status_code"] = statusCode}這實際上可以工作,但問題是Flutter Web使用哈希格式的路由(即 http://website.com/#/dashboard),瀏覽器不發送主題標簽后面的部分,所以我的golang服務器看到 http://website.com/,然后它檢查靜態文件服務器是否可以處理這個URL,它可以,所以靜態文件服務器發送響應。我該如何解決這個問題?是否可以將完整的 URL 發送到服務器,包括 # 后面的部分?提前感謝您的幫助!我如何解決它受到我從@ResamVi那里得到的建議的啟發:我按照答案中的步驟操作,以便我的應用程序最終具有基本href /app/。然后,為了使服務器正常工作,我對服務器文件進行了以下更改:package mainimport ( "net/http" "strings")func main() { http.ListenAndServe(":2000", professionalServer{})}現在,以 /app 開頭的請求將加載 flutter Web 應用的資產,或者,如果沒有資產滿足請求,則將加載索引.html。如果請求 URL 不以 /app 開頭,則會提供靜態文件。
1 回答

慕斯王
TA貢獻1864條經驗 獲得超2個贊
這可能更適合作為評論,如果你想改變Web應用程序的URL策略,我會問澄清,但我沒有代表(原諒我,主,但這個規則有點限制)
如果可以隨意更改 URL 策略,則可以通過在適當的位置添加依賴項來執行此操作,如上面的鏈接中所述:
import 'package:url_strategy/url_strategy.dart';
void main() {
setPathUrlStrategy();
runApp(MyApp());
}
- 1 回答
- 0 關注
- 88 瀏覽
添加回答
舉報
0/150
提交
取消