Перепишите правило, чтобы файлы css и js с абсолютными путями загружались правильно

#node.js #apache #.htaccess

#node.js #apache #.htaccess

Вопрос:

Это заняло у меня 2 часа, но я не могу разобраться, и я не знаю, как найти решение в Google.

Это мое правило перезаписи в файле .htaccess:

 RewriteCond %{REQUEST_URI} ^/blog/(.*)
RewriteRule ^blog/(.*) http://localhost:2368/$1 [P]
  

Когда я вызываю example.com/blog это перенаправляет меня на мой ghost-blog, запущенный в nodejs (порт 2368).

Проблема: блог сам загружает файлы css и js с абсолютными путями:

<link rel="stylesheet" type="text/css" href="/assets/built/screen.css" /> .

Таким образом, он пытается загрузить example.com/assets/built/screen.css .

Но файл доступен по example.com/blog/assets/built/screen.css

Как я могу это решить?

Ответ №1:

У вас есть 3 альтернативы:

  • Измените источник ссылок / скриптов на /blog/assets/...

  • Измените расположение файлов на /assets

  • Используйте RewriteRule

.htaccess

 RewriteCond %{REQUEST_URI} ^/assets(.*).(css|js)$
RewriteRule ^(.*) /blog/$1 [L]

RewriteCond %{REQUEST_URI} ^/blog/(.*)
RewriteRule ^blog/(.*) http://localhost:2368/$1 [P]
  

Вот работающее правило: .htaccess tester

Я предполагаю, что файлы обслуживаются apache2, а не ghost-blog запущенным в node.js . Но если это последнее, оно все равно будет работать, поскольку после перенаправления перейдет к следующему правилу. Но вы также можете сделать следующее:

 RewriteCond %{REQUEST_URI} ^/assets(.*).(css|js)$
RewriteRule ^(.*) http://localhost:2368/$1 [L]
  

Комментарии:

1. Хорошо, первые две строки в ваших правилах позволят каждому запросу заканчиваться перенаправлением css amp; js на blog / reuest и имейте в виду, что второе правило снова перенаправит запрос на localhost: 2368 / reuest без bolg , поэтому та же проблема

2. Я знаю, что делает мое правило, я даже предоставил тестер.

3. Это решение (а также другое) кажется мне обходным. Первые 2 альтернативы невозможны, потому что это не мой код. Если я отредактирую его и выйдет новая версия, мне придется редактировать файлы снова. Правила перезаписи решают 1 проблему, но возникает новая. На сайте есть много ссылок, которые ссылаются на /foobar. Но мои файлы находятся в / blog / foobar. Это как-то решаемо с RewriteBase / ?

4. @Alpha Почти наверняка, какая бы библиотека / фреймворк вы ни использовали, имеет настройки для корневого каталога приложения, поэтому вам не придется издеваться над перезаписями или перенаправлениями. Таким образом, вместо того, чтобы спрашивать о симптомах , вы бы решили проблему быстрее и чище, если бы просто спросили «Как изменить корневой каталог в framework XYZ?»

5. Я уже давал вам свой совет. Создайте новый вопрос с заголовком «Как изменить корневой каталог в XYZ», где XYZ — это фреймворк / библиотека / платформа, которая генерирует ссылки. Невозможно сказать, как «действительно» исправить ссылки, потому что вы не сказали, что их генерирует.