这是我一直想用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/
。但是同样的系统应该以这种方式屏蔽任何路径。)
答案 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>