我正在尝试重定向
到
从用户隐藏“/ subdir”。至少在他的网吧。
根据我的基本知识我想出了什么:
RewriteEngine on
RewriteRule ^(/(.*))?$ http://www.domain.com/subdir/$1 [P,L]
它在重定向方面有效,但它不是背包。 有什么提示吗?
答案 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]