【问题标题】:Apache 2.4 - transparently redirect to subfolderApache 2.4 - 透明地重定向到子文件夹
【发布时间】:2017-11-23 18:18:08
【问题描述】:

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

RewriteCond %{REQUEST_URI} !^/_site.*
RewriteRule ^(.*)$  _site/$1 [L]

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

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

毕竟我用的是[L] for last,怎么会出现递归呢?!?

如果我试图阻止对站点文件夹的直接访问(如 example.com/_site/favicon.ico),请在第一行前面添加:

RewriteRule ^_site.* - [R=403,NC,L]
RewriteCond %{REQUEST_URI} !^/_site.*
RewriteRule ^(.*)$  _site/$1 [L]

然后,在 合法 访问 (example.com/favicon.ico) 上我也得到了 403!

显然,每个请求都需要另一轮。合法的,然后在“第 2 轮”中匹配禁止规则。那么,这里有什么问题?

为什么“last”不意味着“last”?(是否发生了一些变化,即在 Apache 2.2 和 2.4 之间?因为.htaccess 那里发生了很多变化......)

【问题讨论】:

    标签: apache .htaccess redirect mod-rewrite


    【解决方案1】:

    咳嗽,“最后”并不完全意味着“最后”。这只是意味着

    “现在在此文件中退出重写,忽略其余行”。

    但这也意味着

    „用那个新的(重写的)url 重新运行整个 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-09
      • 2019-03-23
      相关资源
      最近更新 更多