diff --git a/frontend/src/api/axios-init.js b/frontend/src/api/axios-init.js
index 2ea235c5..3055e883 100644
--- a/frontend/src/api/axios-init.js
+++ b/frontend/src/api/axios-init.js
@@ -51,7 +51,12 @@ export function setupAxios() {
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
- const basePath = window.X_UI_BASE_PATH;
+ // Read base path from window object or fallback to meta tag (for Cloudflare Rocket Loader compatibility)
+ let basePath = window.X_UI_BASE_PATH;
+ if (!basePath) {
+ const metaTag = document.querySelector('meta[name="base-path"]');
+ basePath = metaTag ? metaTag.getAttribute('content') : null;
+ }
if (typeof basePath === 'string' && basePath !== '' && basePath !== '/') {
axios.defaults.baseURL = basePath;
}
diff --git a/web/controller/dist.go b/web/controller/dist.go
index fd1b35a9..682f0024 100644
--- a/web/controller/dist.go
+++ b/web/controller/dist.go
@@ -56,6 +56,7 @@ func serveDistPage(c *gin.Context, name string) {
csrfToken = ""
}
csrfMeta := []byte(``)
+ basePathMeta := []byte(``)
nonceAttr := ""
if nonce := c.GetString("csp_nonce"); nonce != "" {
@@ -69,6 +70,7 @@ func serveDistPage(c *gin.Context, name string) {
script += `;`
inject := []byte(script)
inject = append(inject, csrfMeta...)
+ inject = append(inject, basePathMeta...)
inject = append(inject, []byte(``)...)
out := bytes.Replace(body, []byte(""), inject, 1)