Apache 2.4 - 透明地重定向到子文件夹

时间:2017-11-23 18:18:08

标签: apache .htaccess redirect mod-rewrite

我透明地将每个请求(html,css,js,...)重定向到子文件夹_site(我的静态Jekyll网站所在的位置......)

RewriteCond%{REQUEST_URI}!^ / _ site。*   RewriteRule ^(。*)$ _ site / $ 1 [L]

基本上有效。虽然我觉得它很奇怪,我必须使用Rewrite条件来阻止迭代:

  

AH00124:由于可能的配置错误,请求超出了10个内部重定向的限制。使用' LimitInternalRecursion'增加限制,如果......

毕竟,我正在使用[L] for last,那么为什么我最终会进行递归?!

如果我尝试阻止直接访问网站文件夹(例如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发生了很多变化。 ..)

1 个答案:

答案 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