.htaccess重定向到子文件夹,并删除它的名称

时间:2012-12-16 14:46:12

标签: .htaccess mod-rewrite redirect hide subdirectory

我在网络世界中都是一个菜鸟,所以我很抱歉......我在SO和其他地方尝试过很多东西,但我没有设法做我想做的事情。 Apache文档......太完整了。

基本上我想要做的是将我的域名重定向到子文件夹。我为此找到了简单的解决方案(实际上有很多不同)。

http://www.foo.com/
http://foo.com/

应重定向到/bar,并显示为http://foo.com/

使用以下内容我得到了预期的结果:

RewriteEngine on
Options +FollowSymLinks
RewriteCond %{HTTP_HOST} ^www\.foo.com$
RewriteRule ^/?$ "http\:\/\/foo.com" [R=301,L]
RewriteRule ^((?!bar/).*)$ bar/$1 [NC,L]

但我还希望子文件夹以及文件名在显式输入时不显示,即:

http://www.foo.com/index.html
http://foo.com/index.html
http://wwww.foo.com/bar
http://foo.com/bar
http://wwww.foo.com/bar/index.html
http://foo.com/bar/index.html

全部都应显示为

http://foo.com/

这可能吗?

显然使用.htaccess,因为我在虚拟主机上。

由于

1 个答案:

答案 0 :(得分:0)

正如菲利普所说,这实际上是不可能的,因为当你执行R = 301重定向时会丢失信息:像这样的硬重定向会启动一个全新的请求,而没有前一个请求的记忆。

当然,有办法做类似的事情。最简单的方法是将原始请求放在查询字符串中(here,这是mod_rewrite如何与查询字符串一起使用的一个很好的概述)。当然,查询字符串确实显示在URL中,但是大多数现代浏览器都隐藏了地址栏中的查询字符串,因此如果您的目标是美学,那么此方法将是可行的。

如果您确实不想在网址中显示任何原始查询,则可以使用Cookie CO flaghere是一些关于Cookie操作的非常好的示例)。无论如何,有关原始请求的信息必须以某种方式在硬重定向中传递。

但无论如何,最重要的是,你为什么要做这样的事情?它必然会混淆人类和机器人。很多页面都表现得像这样时尚,它非常可怕(没有书签,没有简单的内容链接,谷歌搜索结果与“你的浏览器无法处理帧”,没有重新加载,不稳定的后退按钮,哦,男孩,那些日子。)

说到这一点,如果你的内容是html,你可以使用一个简单的旧iframe来达到效果(但我真诚地建议反对它)。