【问题标题】:Apache site root for development directories on localhost本地主机上开发目录的 Apache 站点根目录
【发布时间】:2011-02-24 23:44:17
【问题描述】:

我认为我遗漏了一些东西,并且认为我并不真正了解 rewriteBase 的工作原理。

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

例如,如果我有一个图像文件夹,我想通过使用 href 中的初始斜杠从站点根目录引用图像。例如使用相对href(没有初始斜线)不是一种选择。这将在生产站点上工作,但开发站点正在寻找 http://localhost/images/imagename.jpg 而不是 http://localhost/sitename/images/imagename.jpg

所以我认为我需要做的就是在我的 .htaccess 文件中设置以下内容,以在开发环境中强制站点根到我的子域:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /sitename

但这仍然使用 localhost 作为站点根目录,而不是 localhost/sitename。

谁能指点一下?

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

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

最后,我在本地服务器上的 Apache 中设置了虚拟主机,但仅仅更改站点根目录似乎太过分了。我还担心 LAN 网络上的其他开发人员将无法通过虚拟主机正确访问该站点。

我真的需要一些关于在 WAMP 中设置可行的开发环境的“最佳实践”建议。

【问题讨论】:

  • 我不得不在一个有 8 个站点(虚拟主机)的服务器上对一个站点进行大量修改,所以我将该站点复制到另一个目录,并为该目录添加了一个新的虚拟主机(以及新的子域)。不要认为这是矫枉过正,在我的情况下是模拟开发服务器的最佳方式。
  • 随着时间的推移,我们一直在为所有 Web 开发项目设置虚拟主机。自从编写 OP 以来,它几乎已成为我们的标准做法。
  • 这是一个很好的做法。为了使开发站点可供其他人使用,通配符 DNS 就派上用场了。如果您有一个名为 dev01.example,com 的主机,只需将 *.dev01.example.com 指向那里。然后,当您需要项目“foo”的开发站点时,您只需为 foo.dev01.example.com 设置一个虚拟主机,而不必接触 DNS 或主机文件。
  • @timdev : +1 for the wilcard DNS, 它更简单,尤其是当您没有 DNS 服务器时。

标签: php apache .htaccess mod-rewrite


【解决方案1】:

RewriteBase 基本上告诉 Apache 在哪里应用RewriteRules。在这里你没有。顺便说一句,您可以完全删除 RewriteBase 指令,或者将其更改为:

RewriteBase /

以下两行应该让它适用于您的开发环境:

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

这两个指令的意思是:“如果请求的文件不存在(-f),并且仅在这种情况下,将/sitename/前面的url重写为请求的URI($1)”。

有关更多信息,您可以查看Apache mod_rewrite docsApache URL rewriting guide

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多