使用htaccess屏蔽文件夹名称

时间:2010-10-21 00:29:58

标签: .htaccess mod-rewrite

这是我一直想用htaccess解决的问题。我还没有找到办法,虽然它看起来应该是可能的 - 也许有人可以提供帮助。

假设我的网站根目录中有一个名为/foo/的文件夹。我希望用户能够在路径/bar/访问该文件夹,但出于各种原因,我无法重命名该文件夹。

为了不造成混淆,我只希望看到一条路径 - 也就是说,我希望人们使用名称/foo/来访问该文件夹;他们应该始终使用/bar/。如果有人转到example.com/foo/,他们的浏览器应重定向到example.com/bar/ - 但返回的内容应该是/foo/的内容。

为了使问题更复杂,/foo/中的页面在/foo/内具有依赖关系(图像,样式表,指向其他页面的链接等),这些页面是硬编码且无法更改的。当然,这些必须仍然有效。

总而言之,这就是我想要的:

  • example.com/foo/的请求应重定向到example.com/bar/
  • example.com/bar/的请求应返回example.com/foo/
  • 的内容

这可能吗?它表面看起来好像会创建一个无限重定向......但我很确定有什么方法可以阻止它在htaccess中,不存在吗?

我非常感谢任何帮助。

(PS - 有一点额外背景:我想这样做的正常原因是将wordpress /wp-admin/目录重命名为更专业,更容易让客户记住的内容,例如/admin/。但是同样的系统应该以这种方式屏蔽任何路径。)

2 个答案:

答案 0 :(得分:1)

我找到了一种解决方法 - 通过组合使用符号链接 htaccess。

首先,我创建了一个从/bar/foo/的符号链接 然后我把它放在htaccess中:

Options +FollowSymLinks
RewriteRule ^foo/(.*)$ bar/$1 [R,L]

这具有完全理想的结果 - example.com/bar/显示/foo/目录的内容,example.com/foo/重定向到example.com/bar/

但如果有人能想出一个纯粹的htaccess解决方案,那我就更喜欢了!


更新:

好的,我终于找到了如何做到这一点。事实证明这很简单......

RewriteCond %{THE_REQUEST} ^GET\ /foo/
RewriteRule ^foo/(.*)$ bar/$1 [R,L]

RewriteRule ^bar/(.*)$ foo/$1

唯一的问题是它没有考虑RewriteBase,所以你必须在第一行(^GET\之后)包含完整路径。

答案 1 :(得分:0)

如果我在你的.htaccess文件中正确理解了你想要的东西:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^foo/$ bar/
RewriteRule ^bar/$ foo/
</IfModule>