Некоторое время у меня была эта проблема, и я безуспешно искал ответы на все вопросы.
<img src="/images/test.jpg" />
Получает изображение из (корневой путь – в моем случае при производстве в LAMP)
htdocs/images/test.jpg
Вызывается ли это из htdocs / index.php или htdocs / foo / bar / index.php
Я использую XAMPP в разработке, а внутри htdocs есть папки с проектами, поэтому описанный выше метод будет работать, когда live требует от меня изменить его:
<img src="/projectName/images/test.jpg" />
при работе на местном уровне.
Чтобы упростить эту задачу, я определяю константу BASE, которая в разработке я использую:
define('BASE','/projectname/)
И затем, когда я буду жить, я перехожу к:
define('BASE','/') <img src="<?php echo BASE;?>images/test.jpg" />
Это, очевидно, очень раздражает и в конечном итоге вызывает несколько проблем. Пожалуйста, может кто-то пролить свет на эту ситуацию, что я специально хочу сделать, это использовать корневой путь в моих источниках изображения / сценария, но для:
<img src="/images/test.jpg" />
при вызове из htdocs / projectName / foo / test.php
искать изображение в:
htdocs/projectName/images/
Это возможно?
Альтернативный способ справиться с этим – с использованием виртуальных хостов.
Виртуальный хост действует как вторая версия localhost, которая работает специально для подпапки. Например, вы можете настроить Apache так, чтобы при посещении http://example
(нет .com
или чего-то еще) он показывает вам контент из http://localhost/example/
. Все CSS и JavaScript и ссылки будут действовать так, как если бы они работали из корневой папки веб-сайта, поскольку папка с ведущим example
была удалена из URL-адреса.
Я не могу найти пошаговое руководство, которое я использовал для XAMPP, но здесь аналогичный, который охватывает все основные моменты. Он был написан для Windows, но я полагаю, что существуют аналогичные механизмы, которые вы можете использовать для LAMP:
Подведем итог, вот что говорит вам статья:
example
вы отправили 127.0.0.1
127.0.0.1
(но, например, имя веб-сайта), он показывает содержимое из папки example
. Так ваш производственный сайт (который является единственным сервером с несколькими веб-сайтами) имеет разные «корни» для каждого веб-сайта.
Вы когда-нибудь думали о базовом теге в заголовке вашего html-контента? http://www.w3schools.com/tags/tag_base.asp
<head> ... <base href="<$path />"> ... </head>
получить базовый путь:
$path = $_SERVER['SERVER_NAME'] == 'production.host' ? '/' : 'projectName';
Я думаю, что лучший способ сделать это – с помощью baseurl, установить ваш baseurl в своей конфигурации и использовать его для внешних файлов.
$config = new Config(); public $baseurl = "http://dev050.nl";
Вы можете использовать его тогда как
$config->baseurl;
И, может быть, это для вас что-то интересное: http://twig.sensiolabs.org/
надеюсь, что это помогло.
Я делаю аналогичную вещь для переключения баз данных между моим сервером dev и сервером хостинга, если он вам пригодится. Нет причин, по которым он не должен работать для базового URL-адреса.
// db connect if($_SERVER['SERVER_NAME'] != "dev.mydomain.org"){ try{ $pdo = new PDO('mysql:host=mysql.***.net;dbname=***;charset=utf8', '***', '***'); }catch(PDOException $ex){ header('Location: error_db.php'); } }else{ try{ $pdo = new PDO('mysql:host=localhost;dbname=***;charset=utf8', '***', '***'); }catch(PDOException $ex){ header('Location: error_db.php'); } }
Вы можете либо попробовать решение, предоставленное другими в этом потоке (которые являются программными решениями), либо как альтернатива, я делаю что-то другое (решение для установки).
Для меня мне нравится создавать независимую среду, в которой мои проекты и файлы разработки отдельно от XAMPP (я использую XAMPP, но этот принцип применим к другим средам хостинга). Это позволяет мне легко устанавливать новые обновления для XAMPP, когда они становятся доступными, не беспокоясь о моих проектах, а также мне нравится иметь все мои проекты в одной папке, посвященной разработке. Эта папка разработки будет содержать проекты для веб-приложений, мобильных и других сред.
Способ, которым я настроил это, есть у меня папка c:\dev\
, которая будет содержать список моих проектов, каждый проект будет сам по себе. Так, например, c:\dev\project1\
, c:\dev\project2\
и т. Д.
Теперь, после создания этих папок для разработки, я httpd-vhosts.conf
файл httpd-vhosts.conf
(расположенный в c:\xampp\apache\conf\extra\
) и файл hosts
(расположенный в c:\Windows\System32\drivers\etc\
) имеют правильные ссылки.
Предположим, что один из моих проектов называется project1
. и он обычно находится в c:\xampp\htdocs\project1
тогда я обычно получаю доступ к нему через браузер, поскольку http://localhost/project1
Однако, чтобы иметь независимую среду и, как объяснялось ранее, я создал бы папку разработки в диске c:\dev
, тогда я бы переместил в нее project1
и закончил с c:\dev\project1
Затем, чтобы получить доступ к этому проекту, набрав файл httpd-vhosts.conf
в веб-браузере, я httpd-vhosts.conf
файл httpd-vhosts.conf
расположенный в c:\xampp\apache\conf\extra\
следующим образом:
<VirtualHost project1.dev:80> ServerAdmin admin@project1.dev DocumentRoot "C:/dev/project1" ServerName project1.dev ServerAlias www.project1.dev ErrorLog "logs/project1.dev.error.log" CustomLog "logs/project1.dev.access.log" combined <Directory "C:/dev/project1"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Order allow,deny Allow from all Require all granted </Directory> </VirtualHost>
Кроме того, я должен обновить файл hosts
(расположенный в c:\Windows\System32\drivers\etc\
и добавить следующую запись:
127.0.0.1 project1.dev 127.0.0.1 www.project1.dev
(где 127.0.0.1 совпадает с вашим локальным хостом . Также обратите внимание, что вам нужно добавить вторую запись в файл hosts
для псевдонима www
).
Это позволяет мне получить доступ к моему проекту как: http://project1.dev
Как только это будет установлено, я могу теперь последовательно писать свой код для моей среды разработки и производства, а мои ссылки на root будут работать нормально.
Кроме того, с этой настройкой мне все равно, нужно ли мне обновлять XAMPP или переключаться на LAMP или что-то еще, все, о чем я забочусь, это убедиться, что я позабочусь только об одном файле, который является моим установочным файлом httpd-vhosts.conf
, И, как я уже упоминал, я всегда предпочитаю иметь отдельную папку для разработки, и у меня могут быть разные типы проектов в среде разработки, например, мобильные проекты, веб-проекты и т. Д.
Надеюсь это поможет.
Если вы хотите настроить многоузловую (настройку субдомена), то после того, как вы включите WordPress для нескольких пользователей в соответствии с инструкциями WordPress, вам необходимо сделать следующее:
Предполагая, что для многопользовательской структуры требуется следующая структура:
project1.dev www.project1.dev (this is an alias to project1.dev) sub.project1.dev (this is another setup, subdomain)
Затем вам нужно добавить следующую запись в httpd-vhosts.conf
<VirtualHost sub.project1.dev:80> ServerAdmin admin@project1.dev DocumentRoot "C:/dev/project1" ServerName sub.project1.dev ErrorLog "logs/sub.project1.dev.error.log" CustomLog "logs/sub.project1.dev.access.log" combined <Directory "C:/dev/project1"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Order allow,deny Allow from all Require all granted </Directory>
И обновите файл hosts
чтобы включить
127.0.0.1 www.project1.dev
Обратите внимание, что DocumentRoot
указывает на тот же каталог как для основного сайта, так и для сайта субдомена.
Повторите процесс для каждого нового субдомена, который вы добавляете в свою сеть WordPress.
Возможным решением может быть использование mod_rewrite для автоматического изменения пути на вашем сервере разработки
RewriteCond %{HTTP_REFERER} ^https?://localhost/testsite/ RewriteCond %{REQUEST_URI} \.(jpg|gif|png|bmp)$ RewriteRule ^ /testsite/$1
Я считаю, что приведенное выше правило mod_rewrite верное, но было бы лучше проверить это самостоятельно.