URL-маршрутизация и относительные пути - PullRequest
1 голос
/ 07 ноября 2011

Допустим, контроллером по умолчанию является root.php, тогда оба URL будут работать

website.com/
website.com/root

, если в контроллере есть функция с именем login , тогда этот URL также действителен

website.com/root/login

но шаблон HTML, который работал в первом примере, не работает во втором, например, этот относительный путь больше не действителен

<link rel='stylesheet' href='stylesheets/style.css'/>

и вместо этого для website.com/root/login у меня естьиспользовать другой путь

<link rel='stylesheet' href='../stylesheets/style.css'/>

, хотя я нахожусь в одном контроллере и пытаюсь использовать одну и ту же таблицу стилей.

Есть ли способ обойти это?

Ответы [ 2 ]

3 голосов
/ 07 ноября 2011

Это потому, что браузер ищет таблицы стилей относительно URL-адреса в адресной строке.

так же, как и в случае с первой таблицей стилей во втором URL-адресе, т.е.

Браузер ищет файл в

website.com/root/stylesheets/styles.css

Это не то место, где хранятся файлы.Я предполагаю, что они на самом деле находятся на website.com/stylesheets/styles.css.

Самый простой способ обойти это - просто указать все пути относительно корня сайта.найти, что это работает.

<link rel='stylesheet' href='/stylesheets/style.css'/>
2 голосов
/ 08 октября 2015

Если ваша среда разработки находится в подкаталоге (пример: htdocs/myWebSite/), но ваш производственный веб-сайт не находится в подкаталоге, то простое использование /stylesheets/style.css сделает невероятной миграцию между двумя версиями вашего веб-сайта.болезненно, так как вам придется проходить через каждую такую ​​ссылку и добавлять / вычитать /myWebsite из каждой из них.

Возможное решение этой проблемы - определить глобальную переменную в вашем коде, которая представляет ваш коренькаталог, а затем используйте эту переменную в начале всех ваших ссылок.Например:

$BASEurl = "http://localhost/myWebsite";
echo "<link rel='stylesheet' href='$BASEurl/stylesheets/style.css'>";

Затем, когда вы загружаете проект на рабочий сервер, просто измените значение $ BASEurl на http://www.nameOfYourDomain.com, и все готово.

...