Невозможно обслуживать статические файлы с экспресс-маршрутизацией и без косой черты
Мне нужен маршрут под названием "main", который будет обслуживать статические файлы:
app.use('/main',express.static(__dirname+'/public'));
Однако, когда я делаю:
http://my.site.dev/main
Файлы CSS и JS не будут загружаться, потому что они пытаются получить их из
http://my.site.dev/css/styles.css
Он должен получать файлы из:
http://my.site.dev/main/css/styles.css
Однако, если я получаю доступ к моему сайту с завершающим косой чертой:
http://my.site.dev/main/
Все файлы проходят через мелкие
Любые идеи, почему не иметь завершающего косая черта, задерживают такие ресурсы, как CSS и JS?
Ответы
Ответ 1
Это проблема с http, а не только проблема, связанная с Express. Проблема обсуждается в:
Если ваш URL-адрес/основной и ваш относительный URL-адрес - css/style.css, он будет разрешен /css/style.css; но если ваш URL-адрес/основной/, относительный URL-адрес разрешает /main/css/style.css.
Моя стратегия для решения этой проблемы заключается в перенаправлении для добавления конечной косой черты. Как это в Express:
app.all(/^\/main$/, function(req, res) { res.redirect('/main/'); });
app.use('/main/',express.static(__dirname+'/public'));
Или:
app.enable('strict routing');
app.all('/main', function(req, res) { res.redirect('/main/'); });
app.use('/main/',express.static(__dirname+'/public'));
Ответ 2
Как файлы JS/CSS запрашиваются в HTML? Если вы используете строки типа css/styles.css
, то он попытается получить их из текущего каталога. Каталогом для /main
является /
(точно так же, как /main.html
), а для /main/
- /main/
. Быстрое исправление заключалось бы в использовании /main/css/styles.css
в вашем HTML.