Apache 如何将根目录设置为子文件夹(本地php开发环境)

Apache 如何将根目录设置为子文件夹(本地php开发环境),apache,relative-path,virtualhost,directory-structure,Apache,Relative Path,Virtualhost,Directory Structure,我刚刚开始学习web开发,但在设置本地开发环境时,我有点困惑 我在共享主机上有一段时间的php站点。我会编辑本地文件并上传,然后刷新以确保一切正常。我知道这是一种顽皮的行为 因此,我尝试设置一个本地开发环境,并为本地Web服务器(PHP5)安装了AMPS。 我已经雄心勃勃地设置了下面的文件夹结构,这样我就可以编写一系列的网站来尝试不同的语言和框架,同时保持它们的独立性。(方括号表示文件夹)。请注意,如果这是正确的方法。。。(?) 然而,我遇到的第一个障碍是,我所有的链接都是相对的,当然,我已经用

我刚刚开始学习web开发,但在设置本地开发环境时,我有点困惑

我在共享主机上有一段时间的php站点。我会编辑本地文件并上传,然后刷新以确保一切正常。我知道这是一种顽皮的行为

因此,我尝试设置一个本地开发环境,并为本地Web服务器(PHP5)安装了AMPS。 我已经雄心勃勃地设置了下面的文件夹结构,这样我就可以编写一系列的网站来尝试不同的语言和框架,同时保持它们的独立性。(方括号表示文件夹)。请注意,如果这是正确的方法。。。(?)

然而,我遇到的第一个障碍是,我所有的链接都是相对的,当然,我已经用我的主机在根目录上传了我的网站。我的本地开发环境的根目录现在是
www
,正如您所看到的,从我安装站点的位置可以看到几个文件夹

链接(例如
)现在显示为:
“localhost/section1/page1.php”
,而我认为它们实际上应该显示为
“localhost/PROJECTS/project\u name/section1/page1.php”

我不认为告诉APACHE我的根目录是[project_name]是正确的方法,因为这样它就不能用于我创建的其他项目。我假设我应该逐个项目地做一些事情来指定它自己的根目录

我想我可以通过将
.htaccess
文件添加到
project\u name
文件夹中来指定root:

根据我的在线调查,我认为会有这样的结果:

RewriteEngine on
RewriteRule ^/$ /PROJECTS/project_name/
或许

RewriteEngine on
RewriteRule ^/$ .;C/PHP/AMPSS/www/PROJECTS/project_name/
但是我不能让这些工作

当这个网站上线时,我还在每个页面的顶部都编码了
,认为我做的是对的。 现在我不太确定我是否正确理解了我在那里做的事情。在我的开发环境中,无论是否使用它,它似乎都不会产生任何影响。我还没有能够以任何方式成功地编辑它来解决我的相对链接问题

抱歉发了这么长的邮件

我非常感谢所有的反馈/帮助。提前感谢:)

[已解决]-下面的建议非常完美。谢谢大家。:)

Chrome用户提示: 如果您使用的是自定义域,就像我对.dev所做的那样,请使用
http://
继续处理该地址,或者使用一个尾随的
/
结束该地址。 例如,我现在通过访问projectname.dev/(没有最后一个/it尝试搜索)在Chrome中访问我的开发人员站点

起初,我以为我错误地设置了VirtualHost或hosts,但实际上正是这种Chrome行为掩盖了问题。在撰写本文时,其他浏览器(如Firefox)并不关心这个问题。
希望这对其他人有所帮助。

您认为为每个项目配置Apache是正确的。最好是用它来做。为每个项目定义一个虚拟主机,并为其指定一个域名或子域以供开发。在我的例子中,我使用
test.com
进行所有本地开发,并配置
project1.test.com
project2.test.com
等,以便我的所有相关路径按预期工作。为此,我还将
test.com
和子项目的DNS查找解析到我的本地计算机

重写URL是我为一个项目一个项目保留的,而不为特定的服务器设置设置全局重写。这样,我的本地开发环境就接近于实际的服务器环境,特定于项目的重写将按预期工作


希望这有助于

您正确地认识到,为每个项目配置Apache是前进的方向。最好是用它来做。为每个项目定义一个虚拟主机,并为其指定一个域名或子域以供开发。在我的例子中,我使用
test.com
进行所有本地开发,并配置
project1.test.com
project2.test.com
等,以便我的所有相关路径按预期工作。为此,我还将
test.com
和子项目的DNS查找解析到我的本地计算机

重写URL是我为一个项目一个项目保留的,而不为特定的服务器设置设置全局重写。这样,我的本地开发环境就接近于实际的服务器环境,特定于项目的重写将按预期工作


希望这有帮助

我建议使用@Tak提到的方法,但我知道预先配置的WAMP包可能会出现问题,无法添加虚拟主机,因此还有一个解决方案可以在html的头部分使用标记:

<base href="http://localhost/PROJECTS/project_name/">

我建议使用@Tak提到的方法,但我知道预先配置的WAMP包在添加虚拟主机时可能会出现问题,因此还有一个解决方案可以在html的头部分使用标记:

<base href="http://localhost/PROJECTS/project_name/">


您可能希望设置多个虚拟主机名。(请参见
/etc/hosts
)您可能正在寻找设置多个虚拟主机名。(请参阅
/etc/hosts
)感谢所有人提供您的信息。特别是Tak&Mario,因为我推荐了VirtualHost。以前从没听说过,但听起来正是我需要的。在Chrome将我的test.dev链接发送到搜索引擎(而不是像我预期的那样通过主机)后,我在Firefox中取得了一些成功。但是,在httpd.conf中有多个VirtualHost列表会导致它默认为第一个。AMPS似乎不喜欢它,并且在我恢复默认文件之前不允许Apache启动。不过我相信我能熨平皱纹。再次感谢您的大力帮助:)设置vhost时不要忘记
NameVirtualHost*:80
指令。在某些堆栈(即XAMPP)上,会对其进行注释。启用它。Thx newermind!我还犯了在路径文件名中使用\而不是/的错误。