fix: rewrite asset and API paths for subdirectory deployments
index.html uses absolute /frontend/ paths for CSS and JS, and app.js hardcoded const API = '/api'. In subdirectory deployments these resolve to the wrong URL, causing unstyled HTML and broken API calls. - index.php: rewrite /frontend/ references in index.html with detected basePath - app.js: derive BASE_PATH from the script's own URL and prefix API calls
This commit is contained in:
+15
-2
@@ -1,6 +1,19 @@
|
|||||||
/* Protocol Droid — Frontend Application */
|
/* Protocol Droid — Frontend Application */
|
||||||
|
|
||||||
const API = '/api';
|
/* Detect base path from the script's own URL for subdirectory deployments */
|
||||||
|
/* app.js is loaded from <base>/frontend/app.js, so base = everything before /frontend/app.js */
|
||||||
|
(function() {
|
||||||
|
var scripts = document.getElementsByTagName('script');
|
||||||
|
for (var i = 0; i < scripts.length; i++) {
|
||||||
|
var src = scripts[i].src || '';
|
||||||
|
var m = src.match(/^https?:\/\/[^/]+(\/.*)?\/frontend\/app\.js$/);
|
||||||
|
if (m) {
|
||||||
|
window.BASE_PATH = m[1] || '';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
const API = (window.BASE_PATH || '') + '/api';
|
||||||
let currentUser = null;
|
let currentUser = null;
|
||||||
let siteConfig = {};
|
let siteConfig = {};
|
||||||
let allTags = [];
|
let allTags = [];
|
||||||
@@ -835,4 +848,4 @@ function formatDate(s) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// --- Boot ---
|
// --- Boot ---
|
||||||
init();
|
init();
|
||||||
|
|||||||
@@ -29,28 +29,30 @@ $file = __DIR__ . '/frontend' . $uri;
|
|||||||
$real_file = realpath($file);
|
$real_file = realpath($file);
|
||||||
$frontend_dir = realpath(__DIR__ . '/frontend');
|
$frontend_dir = realpath(__DIR__ . '/frontend');
|
||||||
|
|
||||||
if ($real_file === false || strpos($real_file, $frontend_dir) !== 0) {
|
// Helper: serve index.html with asset paths rewritten for subdirectory deployments
|
||||||
|
$serve_index = function() use ($basePath) {
|
||||||
$index = __DIR__ . '/frontend/index.html';
|
$index = __DIR__ . '/frontend/index.html';
|
||||||
if (file_exists($index)) {
|
if (file_exists($index)) {
|
||||||
header('Content-Type: text/html');
|
header('Content-Type: text/html');
|
||||||
readfile($index);
|
$html = file_get_contents($index);
|
||||||
|
// Rewrite absolute /frontend/ paths to include the base path
|
||||||
|
if ($basePath) {
|
||||||
|
$html = str_replace('/frontend/', $basePath . '/frontend/', $html);
|
||||||
|
}
|
||||||
|
echo $html;
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
http_response_code(404);
|
http_response_code(404);
|
||||||
echo 'Frontend not found';
|
echo 'Frontend not found';
|
||||||
exit;
|
exit;
|
||||||
|
};
|
||||||
|
|
||||||
|
if ($real_file === false || strpos($real_file, $frontend_dir) !== 0) {
|
||||||
|
$serve_index();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_file($real_file)) {
|
if (!is_file($real_file)) {
|
||||||
$index = __DIR__ . '/frontend/index.html';
|
$serve_index();
|
||||||
if (file_exists($index)) {
|
|
||||||
header('Content-Type: text/html');
|
|
||||||
readfile($index);
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
http_response_code(404);
|
|
||||||
echo 'Frontend not found';
|
|
||||||
exit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$ext = pathinfo($real_file, PATHINFO_EXTENSION);
|
$ext = pathinfo($real_file, PATHINFO_EXTENSION);
|
||||||
|
|||||||
Reference in New Issue
Block a user