#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 — это фреймворк / библиотека / платформа, которая генерирует ссылки. Невозможно сказать, как «действительно» исправить ссылки, потому что вы не сказали, что их генерирует.