Локальная конфигурация Apache для правильного разрешения файлов - PullRequest
3 голосов
/ 09 апреля 2010

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

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

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

Ответы [ 2 ]

2 голосов
/ 09 апреля 2010

Сначала вы можете попробовать использовать 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@example.com
    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@example.com
    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 указывает на сервер, а не на мой домашний компьютер, поэтому, когда люди пытаются зайти на сайт, они получают все с сервера.

1 голос
/ 09 апреля 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-адресов сработает для вас (и если я вас правильно понимаю, то будет), то это, вероятно, будет намного проще и менее вероятным. у вас дальнейшие неприятности.

...