Apache Rewrite规则指向受密码保护的目录

时间:2016-08-20 16:05:18

标签: apache .htaccess mod-rewrite

考虑以下目录结构,该目录由URL sample.com下的apache webserver提供:

/local/path/index.html
/local/path/.htaccess
/local/path/admin
/local/path/admin/.htaccess
/local/path/admin/projects/project1/index.html
/local/path/admin/projects/project2/index.html
/local/path/admin/projects/project3/index.html

/local/path/projects是指向其他目录的符号链接。 因此/local/path/.htaccess的内容基本上就是这个规则:

Options SymLinksIfOwnerMatch

另一个.htaccess确保admin目录受密码保护。

请求http://sample.com时,index.html已投放。 例如,在用户输入正确的密码后,请求http://sample.com/admin/projects/project1/local/path/admin/projects/project1/index.html的内容。 当然,请求http://sample.com/admin会导致404错误。

我的目的是让地址http://sample.com/admin服务/local/path/admin/projects/project1/index.html。但这应该是重定向,意味着例如在浏览器url-bar中,url仍然是所选择的url。但是,如果有必要,重定向到http://sample.com/admin/就可以了。

我尝试使用以下内容增强/local/path/admin/.htaccess文件:

RewriteEngine On
RewriteRule ^admin admin/projects/project1
RewriteRule ^admin/(.*) admin/projects/project1/$1

但规则似乎没有效果。是因为它指向密码保护区吗?

另一方面,无法在admin/.htaccess内创建规则,如下所示:

RewriteRule ^(.*)$ projects/project1/$1

我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

/local/path/admin/.htaccess

中尝试此规则
RewriteEngine On

RewriteRule ^/?$ /admin/projects/project1/index.html [L]

RewriteRule ^(?!projects/project1/).+$ /admin/projects/project1/$0 [L,NC]

答案 1 :(得分:0)

我建议您更好地查看文档here

  

.htaccess文件中使用重写引擎时,每个目录   prefix(即,指向包含目录的URI路径)   .htaccess会自动删除此RewriteRule文件)   模式匹配并在任何相对之后自动添加(不是   以斜杠或协议名称开头)替换遇到了   规则集的结尾。有关更多信息,请参阅RewriteBase指令   关于将什么前缀添加回相对替换。

再次:

  

删除的前缀始终以斜杠结尾,表示匹配   针对从不具有前导斜杠的字符串发生。因此,一个   带有 ^ / 模式在每个目录上下文中永远不会匹配。

因此,如果自动删除了每个目录的前缀,那么在编写admin时,应该尝试不带/local/path/admin/.htaccess前缀的重写规则。