(mod_rewrite)重定向/ cloak到子目录

时间:2013-05-08 19:24:10

标签: apache mod-rewrite

我正在尝试重定向

http://www.domain.com

http://www.domain.com/subdir/

从用户隐藏“/ subdir”。至少在他的网吧。

根据我的基本知识我想出了什么:

RewriteEngine on
RewriteRule ^(/(.*))?$ http://www.domain.com/subdir/$1 [P,L]

它在重定向方面有效,但它不是背包。 有什么提示吗?

2 个答案:

答案 0 :(得分:0)

首先,根据official mod_rewrite documentation,如果替换部分是绝对URL,则可能发生外部重定向(导致URL在用户的浏览器中发生变化;但是,mod_rewrite应该检查是否绝对URL匹配请求并删除该部分,但我已经检查了它的版本2.2并且重定向发生了。

因此,一个想法是使用像/subdir/$1

这样的相对网址

这看起来不错,但它无法解决您的问题,因为它根本不起作用。

相反,我建议始终在内部添加subdir/这样的内容:

RewriteRule ^subdir/.* - [PT]
RewriteRule (.*) /subdir/$1

一个简短的解释:

  • 第一个斜杠/未包含在模式中,导致此模式:
    • http://www.domain.com/ - > ''
    • http://www.domain.com/dir1/file1.html - > dir1/file1.html
  • 为了防止重复/递归地添加subdir/第一条规则通过[PT],如果它已被修改
  • 然后第二条规则在输入内容之前添加subdir/

请注意,这两个规则始终在内部添加subdir/(对用户不可见)。如果您只是想将该部分添加到根目录的请求中,那么您需要修改规则 - 当然 - 要获得帮助,您可能会在您的问题中澄清用例。

如果您打算更频繁地使用mod_rewrite,我强烈建议您阅读Apache服务器版本的mod_rewrite documentation(在您的情况下我猜2.0或2.2),也许还有一些博客文章(或者甚至是SO的其他问题)

答案 1 :(得分:0)

通过httpd.conf启用mod_rewrite和.htaccess,然后将此代码放在.htaccess目录下的DOCUMENT_ROOT中:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule (?!^subdir/)^(.*)$ /subdir/$1 [L,NC]