gpt4 book ai didi

php - 如何在本地 PHP 开发设置中设置 DOCUMENT_ROOT 和站点根目录?

转载 作者:行者123 更新时间:2023-12-03 00:04:42 25 4
gpt4 key购买 nike

我正在为一个拥有在线网站的人做一份工作。这对我来说是一个陌生的网站,我正在慢慢地研究奇怪的代码。我本地有 MAMP,我的 http://localhost/ 有许多来自其中的客户端文件夹。这段代码中有很多 $_SERVER['document_root'] 命令和引用,例如 ,它们在我本地的 PHP 开发区域中丢失了。

我怎样才能轻松地将 document_root 引用设置为它应该的样子(不过只是在本地,不想弄乱站点文件,因为我需要再次上传它们并且不想中断事件)站点!有没有一种间接设置方法,PHP 认为站点的根目录是这样,图像的 src 引用“/images/...”将正确显示...该站点的本地 PHP 开发 URL 是:http://localhost:8888/_CLIENTS/clientsite/www/ ...但是在代码中,“/images/...”开头的“/”引用了 http://localhost:8888/ ??

谢谢。

最佳答案

@Eddie's answer对我帮助很大,但我仍然需要做一些额外的研究才能在 OSX 上使用 XAMPP 为自己解决同样的问题。我想我应该在这里添加完整的解决方案,以造福子孙后代。

首先,我将以下条目添加到 httpd-vhosts.conf(在 XAMPP 中的“etc/extra/”文件夹下):

NameVirtualHost *:80

<VirtualHost *:80>
ServerName localhost
DocumentRoot "/Applications/xampp/xamppfiles/htdocs/"
</VirtualHost>
<VirtualHost *:80>
ServerName client1.my-machine
DocumentRoot "/Applications/xampp/xamppfiles/htdocs/clients/client1/"
</VirtualHost>
<VirtualHost *:80>
ServerName client2.my-machine
DocumentRoot "/Applications/xampp/xamppfiles/htdocs/clients/client2/"
</VirtualHost>

请注意,我专门使用通配符代替“localhost”作为 VirtualHost url,并在指定每个子域名的位置添加了 ServerName 配置。另请注意,我使用了我的计算机名称(“my-machine”)而不是“localhost”——这样可以正确评估来自任何计算机(而不仅仅是 localhost)的所有请求。我在 OSX 中进行开发,但通过 Parallels 在各种虚拟机中测试浏览器。使用这种方法我可以访问 http://client1.my-machine从我的网络上的任何计算机或虚拟机。指定“localhost”后,它只能在我的开发计算机上运行。

注意:第一个 VirtualHost 条目用作默认值(如下所述: http://httpd.apache.org/docs/2.2/vhosts/name-based.html )并且是必需的,以便请求不会默认发送到某个自定义站点。

我还将权限设置添加到 httpd.conf,如 @Eddie's answer 所示。 。这并不总是必需的,但我遇到了 2 个不同的情况,需要进行此更改:

  • 将新站点放置在默认 XAMPP http 根目录之外的目录中(基本上任何可通过 http 访问的路径都必须设置显式权限)
  • 为设置为虚拟主机的站点(在默认 http 路径下)添加 mod_rewrite 规则时,我收到错误“.htaccess:此处不允许 RewriteEngine”。阅读 httpd.conf 中有关 AllowOverride 选项的注释可以让错误的原因显而易见,但我之前忽略了这一点。将其更改为“全部”修复了错误。

请注意,在编辑 httpd.conf 时,您可能需要取消注释以下行(默认情况下已为我注释掉),否则上面所做的 vhosts 更改将不会生效:

# Virtual hosts
Include /Applications/xampp/etc/extra/httpd-vhosts.conf

最后,我还必须将自定义域名添加到我的主机文件中,如上面评论中所述。在 OSX 上,您可以通过编辑“/private/etc/hosts”(在 Windows 上为“Windows/System32/drivers/etc/hosts”)并添加以下行来完成此操作:

127.0.0.1   my-machine
127.0.0.1 client1.my-machine
127.0.0.1 client2.my-machine

注意:在默认的 OSX Finder UI 中,隐藏文件夹(包括/private)不可见。您可以通过破解内部 Finder 选项(详细信息请参阅 Google)来永久更改此设置,或者更简单地进行偶尔的更改,只需使用“转到 > 转到文件夹”菜单选项,该选项可让您直接按名称打开隐藏文件夹。就我个人而言,我使用名为 PathFinder 的第三方 OSX shell。我衷心推荐(值得支付少量的许可费)。它包括一个隐藏/显示隐藏文件的菜单选项以及许多其他有用的功能。

有一点很麻烦,那就是我还必须在 Windows VM 主机文件中添加指向我的物理开发计算机的匹配条目,以便通过 Apache/OSX 解析 URL:

192.168.1.5 client1.my-machine
192.168.1.5 client2.my-machine

我不需要单独的计算机名称条目(自动解析),但如果没有这些主机条目,向其中添加子域就无法正确解析。有时我的 Mac 的 IP 会发生变化(通过 DHCP),这确实会带来麻烦,但这只是一个小麻烦。我假设我可以将其设置为不需要这些 IP,但我无法弄清楚并准备继续:)(如果有人知道答案,请发表评论)

现在,我在一个地方运行多个客户端站点,并且可以从我的所有开发/测试环境进行访问。希望这对其他人有帮助。

关于php - 如何在本地 PHP 开发设置中设置 DOCUMENT_ROOT 和站点根目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/789816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com