3

我刚刚配置了 Apache 和 PHP 以在我的本地 Mac OS X 计算机上工作。现在 PHP 工作正常,除非我尝试为我的实时站点加载文件。实时站点具有单独的目录,并按客户名称等排序。

我已经在本地 Web 服务器文档的默认根目录中创建了符号链接。我的问题是 Apache 似乎不想加载在 HTML 页面中找到的任何相对路径。例如,我有 src="/css/main.css" 但 Apache 不加载文件,同样对于图像,它只是解析为文件未找到 404 错误。然后我认为这可能是符号链接,所以我将完整目录复制到 Apache 文档根目录中,结果仍然相同。

我真的很想设置我的本地开发环境来运行 Apache、PHP、MySQL 以在本地开发,然后在准备好时发布。我也尝试了 MAMP 安装,并且遇到了同样的问题。

4

2 回答 2

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@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

我的设置更进一步,因为我也设置了服务器。每当我想更新时,我都会加载 webfiles 和 apache 配置文件,这样服务器就可以准确地反映我的本地设置。唯一的区别是真正的 judyates.com 指向服务器而不是我的家用计算机,因此当人们尝试访问该站点时,他们会从服务器获取所有内容。

于 2010-04-08T23:09:22.557 回答
1

你试过 src="css/main.css" 吗?也就是说,没有前导斜杠?如果您有一个前导斜杠,您的文件必须位于 web 服务器根目录中名为 css 的目录中,如果我理解正确,情况并非如此。

编辑:好的,从阅读您的评论来看,您似乎不太清楚相对网址的工作原理。“/css/main.css”与页面在目录树中的位置无关。这意味着在网络服务器根目录中名为“css”的目录中的一个名为“main.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 对您有用(如果我理解正确的话),那么这可能会简单得多,而且不太可能给您带来更多麻烦.

于 2010-04-08T22:45:07.920 回答