-1

我正在尝试重定向

http://www.domain.com

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

用户隐藏了“/subdir”。至少在他的网址栏中。

我根据我的基本知识得出的结论:

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

它在重定向方面起作用,但它不是 cloacking。有小费吗?

4

2 回答 2

0

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

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

RewriteRule (?!^subdir/)^(.*)$ /subdir/$1 [L,NC]
于 2013-05-08T21:38:26.910 回答
0

首先,根据官方 mod_rewrite 文档,如果替换部分是绝对 URL,则可能会发生外部重定向(导致 URL 在用户浏览器中更改;但是,mod_rewrite 应检查该绝对 URL 是否与请求匹配并删除该部分出,但我已经检查了它的 2.2 版并且发生了重定向)。

因此,一个想法是使用相对 URL,例如/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/URL(对用户不可见)。如果您只想将请求的那部分添加到根目录,那么您当然需要修改规则 - 为了获得帮助,您可能会澄清问题中的用例。

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

于 2013-05-08T21:30:38.033 回答