【发布时间】:2013-05-09 05:38:26
【问题描述】:
我正在尝试重定向
到
“/subdir”被用户隐藏。至少在他的网址栏中。
根据我的基本知识我得出的结论:
RewriteEngine on
RewriteRule ^(/(.*))?$ http://www.domain.com/subdir/$1 [P,L]
它在重定向方面起作用,但它不是 cloacking。 有什么建议吗?
【问题讨论】:
标签: apache mod-rewrite
我正在尝试重定向
到
“/subdir”被用户隐藏。至少在他的网址栏中。
根据我的基本知识我得出的结论:
RewriteEngine on
RewriteRule ^(/(.*))?$ http://www.domain.com/subdir/$1 [P,L]
它在重定向方面起作用,但它不是 cloacking。 有什么建议吗?
【问题讨论】:
标签: apache mod-rewrite
首先,根据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 上还有其他问题)。
【讨论】:
通过httpd.conf启用mod_rewrite和.htaccess,然后把这段代码放到你.htaccess的DOCUMENT_ROOT目录下:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteRule (?!^subdir/)^(.*)$ /subdir/$1 [L,NC]
【讨论】: