我透明地将每个请求(html,css,js,...)重定向到子文件夹_site
(我的静态Jekyll网站所在的位置......)
RewriteCond%{REQUEST_URI}!^ / _ site。* RewriteRule ^(。*)$ _ site / $ 1 [L]
基本上有效。虽然我觉得它很奇怪,我必须使用Rewrite条件来阻止迭代:
AH00124:由于可能的配置错误,请求超出了10个内部重定向的限制。使用' LimitInternalRecursion'增加限制,如果......
如果我尝试阻止直接访问网站文件夹(例如mydomain.com/_site/favicon.ico
),请在第一行前面添加:
RewriteRule ^_site.* - [R=403,NC,L]
RewriteCond %{REQUEST_URI} !^/_site.*
RewriteRule ^(.*)$ _site/$1 [L]
然后,同样在合法访问(mydomain.com/favicon.ico
)上我得到了403!
显然,每个请求都需要另一轮。合法的,然后在“第2轮”符合禁止的规则。那么,这里有什么问题?
为什么“最后”不是“最后”?(做了些什么改变,即在Apache 2.2和2.4之间?在那里.htaccess
发生了很多变化。 ..)
答案 0 :(得分:0)
咳嗽,“最后”并不意味着“最后”。这只意味着
“现在退出此文件中的重写,忽略其余的行”。
但这也意味着
“用新的(重写的)网址重新运行整个htaccess-thing。
(如果您的重写规则太具体而无法触发递归,那么您可能不会注意到的事情......即使,如果说实话,its in the docs)
所以,快乐的递归,每个人。要真正结束事情,guess what:
RewriteRule ^(.*)$ _site/$1 [END]
...分别在我的扩展版本中:
RewriteRule ^_site.* - [R=403,NC,END]
RewriteCond %{REQUEST_URI} !^/_site.*
RewriteRule ^(.*)$ _site/$1 [END]
(.. ,L,END
没有受到伤害,但END
暗示L
)