2013-04-29 3 views
4

Я использую абсолютные пути для ссылок на такие ресурсы, как css, images и javascript. Таким образом, в <head> из index.html у меня есть что-то вроде этого:Как переписать пути абсолютных активов в подкаталоге webserver

<link href="/assets/css/style.css" rel="stylesheet"> 

Предполагая, что мой каталог проекта выглядит следующим образом:

 
- index.html 
- assets/ 
-- css/ 
--- style.css 

Это прекрасно работает на моем локальном веб-сервере, где я поставил корень документа к этому с помощью директивы <virtualhost>. Но когда я помещаю это в подкаталог веб-сервера (например, http://www.example.com/subdirectory/), он больше не находит эти активы при обращении к http://www.example.com/subdirectory/index.html.

Как я могу решить это без использования относительных путей в index.html? Можно ли это сделать с помощью файла .htaccess в подкаталоге? Если да, то как?

Редактировать

Есть другие папки на корневом уровне веб-сервером, который уже не должны быть затронуты любым перенаправлении, которое происходит за /subdirectory/

+0

/assets/css/style.css - относительный путь, поэтому я не уверен, что вы имеете в виду. – dave

+0

@dave, это неправда, это абсолютно так, потому что начинается с косой черты. – Nelson

+0

Решение состоит в том, чтобы использовать относительные пути, несмотря на то, что вам это не нравится. – Nelson

ответ

3

Если все находится ниже subdirectory, вы можете использовать простой переписку

RewriteEngine on 
# don't rewrite, if it is already rewritten 
RewriteCond %{REQUEST_URI} !^/subdirectory 
# only rewrite requests for files below /assets 
RewriteCond %{REQUEST_URI} ^/assets/ 
RewriteRule ^.*$ /subdirectory/$0 [L] 
+0

это не работает. Браузер по-прежнему запрашивает http://www.example.com/assets/css/style.css – mediafreakch

+0

@mediafreakch Он работает в моей тестовой среде. У вас есть .htaccess в корневом каталоге? –

+0

Ах, нет, я разместил его в/подкаталоге. Если я поместил его в корневой каталог, он в основном работает. Но теперь я понимаю, что вы имели в виду под «все под подкаталогом». Это не так в моей настройке. Есть много других каталогов, которые не должны быть затронуты. Как мне изменить ваше решение, чтобы не повлиять на других? – mediafreakch

0

Вы можете поместить это в вашей голове:

<base href="http://www.example.com/subdirectory/"> 
+1

Это не сработает, это сработает, если его URL-адреса будут относительными 'assets/css/style.css', но они являются абсолютными '/ assets/css/style.css' – Nelson

+0

Это все еще относительно. Поищи это. – dave

+0

Голосов внизу. Не работает с абсолютными путями. – GijsjanB