Локальная конфигурация Apache для правильного разрешения файлов

Я только что настроил Apache и PHP для работы на моем локальном компьютере с Mac OS X. Теперь PHP работает нормально, за исключением случаев, когда я пытаюсь загрузить файлы для своих живых сайтов. Живые сайты имеют отдельные каталоги и сортируются по имени клиента и т. д.

Я создал символические ссылки в корневом каталоге по умолчанию для документов локального веб-сервера. Моя проблема в том, что Apache, похоже, не хочет загружать ни один из относительных путей, которые можно найти на страницах HTML. Например, у меня есть src="/css/main.css", но Apache не загружает файл, аналогично для изображений, он просто разрешается как ошибка 404 "файл не найден". Затем я подумал, что это могут быть символические ссылки, поэтому я скопировал полный каталог в корень документа Apache и все равно получил тот же результат.

Мне бы очень хотелось настроить мою локальную среду разработки для запуска Apache, PHP, MySQL для локальной разработки, а затем опубликовать, когда она будет готова. Я также пробовал установку MAMP, и у меня были те же проблемы.


person Alex E.    schedule 08.04.2010    source источник


Ответы (2)


Сначала вы можете попробовать использовать src="./css/main.css".

При работе с несколькими активными сайтами мне нравится настраивать один файл конфигурации для каждого сайта с помощью apache, а затем загружать их все вместе в файле httpd.conf.

для моей установки это выглядит так:

в /etc/apache2/httpd.conf

У меня есть:

# Begin virtual host directives.

Include conf/bortreb.conf

Include conf/rlmcintyre.conf

Include conf/laserkard.conf

Include conf/judyates.conf

а затем в /etc/apache2/conf/judyates.conf

У меня есть:

    <VirtualHost *:80>
    #localhost site

    ServerAdmin [email protected]
    DocumentRoot "/home/r/Desktop/web/judyates"
    ServerName localhost
    ServerAlias judyates.localhost
    ErrorLog "/home/r/Desktop/web/judyates/log/error_log.log"
    ScriptAlias /cgi-bin/ "/home/r/Desktop/web/judyates/cgi-bin/"

    <Directory "/home/r/Desktop/web/judyates">
        Options Indexes FollowSymLinks
        Options +ExecCGI
        AddHandler cgi-script cgi pl py
        AllowOverride Options
        Order allow,deny
        Allow from all
    </Directory>

    </VirtualHost>


  <VirtualHost *:80>

    #live site
    ServerAdmin [email protected]
    DocumentRoot "/home/r/Desktop/web/judyates"
    ServerName judyates.com
    ServerAlias *.judyates.com
    ErrorLog "/home/r/Desktop/web/judyates/log/error_log.log"
    ScriptAlias /cgi-bin/ "/home/r/Desktop/web/judyates/cgi-bin/"


    <Directory "/home/r/Desktop/web/judyates">
        Options Indexes FollowSymLinks
        Options +ExecCGI
        AddHandler cgi-script cgi pl py
        AllowOverride Options
        Order allow,deny
        Allow from all

    </Directory>

    </VirtualHost>

Этот способ работает очень хорошо, потому что вы можете настроить поддомен yoursite.localhost для возврата к вашему домашнему IP-адресу.

С этой настройкой, когда я работаю на judyates.com на своем компьютере и хочу протестировать что-либо, я просто захожу на judyates.localhost в своем веб-браузере.

У меня есть около 5 других сайтов, настроенных таким образом в своих собственных файлах *.conf, поэтому каждый из них может жить в своих собственных каталогах на моем компьютере, которые точно соответствуют каталогам, в которых они будут находиться на сервере.

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

Вы можете узнать, как настроить поддомены, которые указывают на вас, здесь: http://digitalpbk.blogspot.com/2007/01/making-subdomains-on-localhost.html

Моя установка идет еще дальше, потому что я также настраиваю сервер. Всякий раз, когда я хочу обновить, я загружаю как веб-файлы, так и файлы конфигурации apache, и таким образом сервер точно отражает мою локальную настройку. Единственная разница в том, что настоящий judyates.com указывает на сервер, а не на мой домашний компьютер, поэтому, когда люди пытаются зайти на сайт, они получают все с сервера.

person Robert McIntyre    schedule 08.04.2010

Вы пробовали src="css/main.css"? То есть без начального слэша? Если у вас есть начальная косая черта, ваши файлы должны находиться в каталоге с именем css, который находится в корневом каталоге веб-сервера, и, если я вас правильно понимаю, это не так.

РЕДАКТИРОВАТЬ: Хорошо, из ваших комментариев кажется, что вы не совсем понимаете, как работают относительные URL-адреса. «/css/main.css» не относится к расположению страницы в дереве каталогов. Это означает файл с именем «main.css» в каталоге с именем «css» в корневом каталоге веб-сервера. Когда вы помещаете свои файлы на сервер развертывания, ваш каталог css находится в корневом каталоге веб-сервера. Но похоже, что вы в настоящее время помещаете каталог css в подкаталог, названный в честь клиента... поэтому ваш файл css теперь находится в «/clientname/css/main.css».

Если я правильно вас понял, вы можете делать то, что хотите, используя относительные URL-адреса. Если ваш html-файл находится в том же каталоге, что и каталог css, вам понадобится «css/main.css». Если он находится в подкаталоге каталога, содержащего каталог css, вам понадобится «../css/main.css» — «..» означает родительский каталог текущего каталога. Если вы используете относительные URL-адреса, они будут продолжать работать до тех пор, пока отношения между файлами не изменятся.

Вот страница по этому вопросу, которая, я думаю, объясняет это адекватно: http://www.webreference.com/html/tutorial2/3.html. Это было почти первое, что я нашел в Google, так что, вероятно, там есть лучшие объяснения.

Существует ряд директив Apache, которые вы можете использовать для этого, но если использование относительных URL-адресов будет работать для вас (и, если я вас правильно понимаю, это будет), то это, вероятно, будет намного проще и с меньшей вероятностью вызовет у вас дополнительные проблемы. .

person Tagore Smith    schedule 08.04.2010
comment
Ну, моя проблема в том, что я хочу, чтобы файлы локального веб-сервера и файлы живого веб-сервера были идентичными. То есть я хотел бы просто внести изменения в свои локальные файлы, сохранить, протестировать локально, а затем опубликовать оттуда. Обычно я добавляю /css/main.css, потому что создаю отдельные файлы заголовков, которые импортируются на сайт в разные папки. Возможно, есть способ заставить Apache заполнить пробел? как /path_to_document_root/css/main/css? Спасибо! - person Alex E.; 09.04.2010
comment
Возможно, лучше спросить, почему /css/main.css работает правильно на живом веб-сервере, но не на моем локальном? - person Alex E.; 09.04.2010