.htaccess将root重写为文件夹,但阻止直接URL到同一文件夹

时间:2015-08-28 18:04:06

标签: apache .htaccess mod-rewrite redirect

我一直在研究和尝试一周来完成这项工作,但我还没能找到解决方案。我确信这是可能的,但我不是巫毒魔法深处的专家。

设置:

  • MantisBT的安装位于 mysite.com/mantisbt/currentver/mantis-1.3.19
  • 当我执行升级时,我想归档所有旧版本和旧版本 数据库转储到/ mantisbt / oldversions /以保持整洁。
  • 我还在各个子目录中有其他实用程序和页面 实例" mysite.com/utils"

目标:

  • 我希望用户输入mysite.com/(root)并重写URL (透明地)到/mantisbt/currentver/mantis-1.3.19/以便它们 没有看到我的目录结构,它看起来像mantisbt应用程序 位于根目录。
  • 我也希望保护任何试图直接访问的人 子目录以" / mantis"开头。例如,如果 有人直接输入mysite.com/mantisbt/currentver/mantis-1.3.19/ 进入他们的浏览器,我希望他们重定向回根目录 所以他们就像其他人一样从root访问网站。
  • 我还需要允许我的其他子目录,如mysite.com/utils 如果我输入它们的完整路径,则可以访问。

我遇到的最大问题是每次URL更改时,Apache都会再次遍历您的.htaccess文件。所以我陷入了这些重写循环。我已经尝试过查看Apache提供的所有可能工具,但我在这里认真对待过。我可以提供我尝试过的例子,他们显然不正确,但问我,我可以发布。

1 个答案:

答案 0 :(得分:0)

您最好改变 httpd.conf 中的 DocumentRoot ,并在 utils 目录中进行映射, 位置指令。它会更清晰,而且Apache不必为每个请求做一些诡计。

无论如何,以下几行应该有效。

# Stop direct access
RewriteCond %{HTTP_REFERER} !mysite.com [NC]
RewriteRule /?mantisbt/currentver/mantis-1.3.19 / [NC,L,R=301]

# Internally Rewrite everything apart from /utils to /mantisbt/mantis-1.3.19/
RewriteCond %{HTTP_REFERER} !mysite.com [NC]
RewriteCond %{REQUEST_URI}  !/utils [NC]
RewriteRule .* /mantisbt/currentver/mantis-1.3.19%{REQUEST_URI} [L]