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

时间:2011-12-10 12:53:22

标签: apache relative-path virtualhost directory-structure

我刚开始学习Web开发,但在设置本地开发环境时让自己有点困惑。

我在共享主机上有一个php网站已经有一段时间了。我会编辑本地文件并上传它们,然后刷新以确保一切正常。我知道一个顽皮的做法!

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

-->[PHP]
---> [AMPPS]
----> [www]
-----> [PROJECTS]

------> [project_name]
-------> index.php
-------> .htaccess
-------> [images]
-------> [section1]
--------> page1.php
-------> [etc...]

------> [project_name]
------> [project_name]
--> [RUBY]
--> [PYTHON]

然而,我的第一个障碍是我的所有链接都是相对的,我当然在我的主机上以root身份上传了我的网站。我的本地开发环境中的root现在是www,正如您所看到的那样是我安装网站的几个文件夹。

链接(例如<a href="/section1/page1.php">Page 1</a>)现在显示为:"localhost/section1/page1.php"我认为它们实际上应显示为"localhost/PROJECTS/project_name/section1/page1.php"

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

我认为我可以通过在.htaccess文件夹中添加project_name文件来指定root:

从我的在线研究中我认为它会像:

RewriteEngine on
RewriteRule ^/$ /PROJECTS/project_name/

或者

RewriteEngine on
RewriteRule ^/$ .;C/PHP/AMPSS/www/PROJECTS/project_name/

然而,我无法让这些工作。

当网站上线时,我还在每页的顶部编写了<?php set_include_path($_SERVER['DOCUMENT_ROOT']); //Look for includes starting from ROOT location ?>,认为我做的是正确的。 现在我不太确定我是否正确地理解了我在那里所做的事情。在我的开发环境中,它似乎没有任何影响。而且我无法以任何方式成功编辑它来解决我的相对链接问题。

很抱歉这篇长篇文章。

我很感激所有的反馈/帮助。在此先感谢:)

[已解决] - 以下建议非常完美。谢谢你们。 :)

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

起初我以为我设置了VirtualHost或托管不正确,而实际上这是Chrome的行为,这使问题蒙上阴影。在撰写本文时,其他浏览器(如Firefox)并未分享此问题。 希望能帮助其他人。

2 个答案:

答案 0 :(得分:3)

为每个项目配置Apache是​​正确的方法。最好用virtual hosts完成。为每个项目定义虚拟主机,并为其提供用于开发的域名或子域。在我的情况下,我使用test.com进行所有本地开发并配置project1.test.comproject2.test.com等,以便我的所有相对路径按预期工作。为此,我还edit my hosts file,因此test.com和子项目的DNS查找将解析为我的本地计算机。

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

希望有所帮助

答案 1 :(得分:0)

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

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