【问题标题】:(mod_rewrite) Redirect / cloack to subdirectory [closed](mod_rewrite)重定向/锁定到子目录[关闭]
【发布时间】:2013-05-09 05:38:26
【问题描述】:

我正在尝试重定向

http://www.domain.com

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

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

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

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

它在重定向方面起作用,但它不是 cloacking。 有什么建议吗?

【问题讨论】:

    标签: apache mod-rewrite


    【解决方案1】:

    首先,根据official mod_rewrite documentation,如果替换部分是绝对 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/

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

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

    【讨论】:

    • 感谢您的解决方案、提示、解释甚至是阅读建议 :-) 是的,现在可以使用了!
    【解决方案2】:

    通过httpd.conf启用mod_rewrite和.htaccess,然后把这段代码放到你.htaccessDOCUMENT_ROOT目录下:

    Options +FollowSymLinks -MultiViews
    # Turn mod_rewrite on
    RewriteEngine On
    RewriteBase /
    
    RewriteRule (?!^subdir/)^(.*)$ /subdir/$1 [L,NC]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多