--- sidebar_position: 4 title: Custom URL Access/Build --- # Hosting the Web Viewer on a Custom URL Path You can host the viewer on a subpath like `/abc` instead of the root `/`. There are **two levels** of customization depending on how you want to serve your static assets. ## Simple Setup (Recommended for Most Use Cases) If you want to make the viewer accessible from a custom path (e.g. `/abc`) and **don’t care where the assets are loaded from** (they’ll be fetched from the root `/`), this setup is for you. ### What You Get - Viewer available at `https://yourdomain.com/abc` - All assets (JS, WASM, etc.) still loaded from the root (`/app.js`, `/viewer.wasm`, etc.) ### How To Set It Up 1. Set `routerBasename` in your config file (e.g., `config/myConfig.js`) to `/abc` 2. Build the viewer with: ```bash APP_CONFIG=config/myConfig.js yarn build ``` ### Local Development ```bash APP_CONFIG=config/myConfig.js yarn dev ``` --- ## Advanced Setup (Custom Asset Path) If you want to host the viewer at `/abc` **and** serve static assets from a different location (e.g. `/my-private-assets`), this is a more advanced scenario. ### What You Get - Viewer accessible from `https://yourdomain.com/abc` - All assets loaded from `https://yourdomain.com/my-private-assets/` ### Why This is Tricky Some libraries (especially ones using WASM) load assets using **relative paths**, which can break if not handled carefully. To solve this: - Set `routerBasename` to `/abc` - Set `PUBLIC_URL` to `/my-private-assets/` - Webpack will load assets from the specified public URL. ### Local Development Notes In development, use proxy rewrites to handle relative asset paths. Example for `dicom-microscopy-viewer`: ```js proxy: { '/dicom-microscopy-viewer': { target: 'http://localhost:3000', pathRewrite: { '^/dicom-microscopy-viewer': `/${PUBLIC_URL}/dicom-microscopy-viewer`, }, }, } ``` This ensures local development can find assets even when libraries expect them at certain paths. ### Building and Serving in Production To build the viewer for production: ```bash PUBLIC_URL=/my-private-assets/ APP_CONFIG=config/myConfig.js yarn build ``` If you're using `npx serve`, make sure to update `serve.json`: ```json { "rewrites": [{ "source": "*", "destination": "/abc/index.html" }] } ``` Serve the viewer like this: ```bash cd platform/app mv dist abc # Rename dist folder to match your viewer route npx serve -c ./public/serve.json ``` --- ### 🐳 Using Docker? You're Covered If you’re using our Dockerfile, you’re all set — it already handles copying specific asset folders (like `dicom-microscopy-viewer`) to the root: ```Dockerfile COPY --from=builder /usr/src/app/platform/app/dist/dicom-microscopy-viewer /usr/share/nginx/html/dicom-microscopy-viewer ``` Keep an eye on the browser network tab for any assets that might fail to load — if any other libraries require similar treatment, you’ll need to handle those as well. --- ## Summary | Goal | routerBasename | PUBLIC_URL | Assets Load From | |-----------------------------------|----------------|-----------------------|--------------------------| | Viewer at `/abc`, assets from `/` | `/abc` | default | Root `/` | | Viewer at `/abc`, assets from `/my-private-assets` | `/abc` | `/my-private-assets/` | `/my-private-assets/` |