Apache本地根目录在本地主机上的开发目录

问题描述:

我想我错过了一些东西,并不认为我真的明白rewriteBase是如何工作的。Apache本地根目录在本地主机上的开发目录

我遇到的问题是我有一个生产站点,该站点位于根目录中,但我的本地主机子目录中有我的开发站点。例如http://www.sitename.com/ VS http://localhost/sitename/

如果我有例如一个图像文件夹我想通过在href使用初始斜线引用从站点根图像。例如,使用相对href(不带初始斜线)不是一个选项。这将工作在生产现场,但网站的发展正在寻找http://localhost/images/imagename.jpg,而不是http://localhost/网站名称 /images/imagename.jpg

所以我想所有我需要做的是建立在我的下面。 htaccess文件强制站点根目录到我的子域的开发环境中:

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase /sitename 

但这仍然使用localhost作为站点根以代替localhost /站点名。

任何人都可以请给我一些指点?

-------------------------编辑-------------------- -------

我停止尝试在.htaccess文件中执行此操作,并尝试使用html命令,但这也无效。

最后,我在本地服务器上的Apache中设置了虚拟主机,但它似乎像改变网站根目录这样一个可怕的很多矫枉过正。我还担心LAN网络上的其他开发人员无法通过虚拟主机正确访问站点。

我真的需要一些'最佳实践'的建议,请在WAMP中建立一个可行的开发环境。

+0

我不得不从一个具有8个站点的服务器(虚拟主机)对站点进行大的修改,所以我将站点复制到另一个目录,并为该目录(和一个新的子站点)添加了一个新的虚拟主机。不要以为这是一个过度的杀手,在我的情况下是模拟开发服务器的最佳方式。 – 2011-03-23 10:06:08

+0

随着时间的推移,我们一直在为我们所有的Web开发项目设置虚拟主机。由于编写OP,它已经成为我们的标准做法。 – Das123 2011-03-24 01:52:55

+1

这是一个很好的做法。为了使dev站点可供其他人使用,通配DNS可派上用场。如果您有一台名为dev01.example,com的主机,只需将* .dev01.example.com指向那里。然后,当您需要项目“foo”的一个devsite时,您只需为foo.dev01.example.com设置一个虚拟主机,并避免触摸DNS或hosts文件。 – timdev 2011-04-12 23:17:19

RewriteBase单独,基本上,告诉Apache在哪里应用RewriteRule s。在这里你没有任何。顺便说一句,你可以完全消除RewriteBase指令,或将其更改为:

RewriteBase/

下面两行应该得到它为你的开发环境只有工作:

RewriteCond %{ REQUEST_FILENAME } !-f 
RewriteRule ^(.+)$ /sitename/$1 [L,QSA] 

这些两个指令的含义是:“如果请求的文件不存在(-f),并且只有在这种情况下,请将URL前缀/sitename/重写为请求的URI($1)”。

欲了解更多信息,你可以看看Apache mod_rewrite docsApache URL rewriting guide