2013-03-14 102 views
0

正如标题所暗示的,我想将一个子目录重定向到另一个子目录,同时阻止直接访问后一个子目录。举例来说,我想阻止对domain.com/foo直接访问:从一个子目录重定向到另一个,但阻止直接访问后一个子目录

RewriteRule ^foo [F,NC] 

但我想domain.com/bar重定向到domain.com/foo

RewriteRule ^bar/* /foo/ [R=301] 

是否有可能这两个规则合并成一个,所以domain.com/bar会加载domain.com/foo但是domain.com/foo不是加载domain.com/foo

+0

这个问题被关闭?无聊的管理员的教科书示例没有更好的办法。 – md4 2016-02-07 02:05:46

回答

1

启用mod_rewrite的,并通过httpd.conf的.htaccess,然后把这个代码在你.htaccessDOCUMENT_ROOT目录:

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

# block direct access to /foo/* 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+foo[/\s] [NC] 
RewriteRule^- [L,F] 

# allow access to /foo/* via /bar/* 
RewriteRule ^bar/(.*)$ /foo/$1 [L,NC] 
+0

这工作完美。你会介意快速解释它是如何工作的吗? – Anthony 2013-03-19 19:30:24

+0

当然,第一条规则是使用'%{THE_REQUEST}'变量来检查在浏览器中输入的实际URL是否为'/ foo/*',如果是则禁止错误返回给用户。第二条规则是**在内部将所有'/ bar/anything'请求转发给'/ foo/anything' URI。由于在第二条规则中不使用'R'标志,所以'%{THE_REQUEST}'不会改变,第一条规则不会再被触发。如果它回答你的问题,你现在可以接受这个答案吗? – anubhava 2013-03-19 20:25:04

+0

有道理。谢谢! – Anthony 2013-03-19 20:30:01

相关问题