AEM Apache Dispatcher 2.4.6客户端被服务器配置拒绝



我有一个AEM 6.3实例在版本为2.4.6的Apache实例后面运行,其中包含调度程序模块。一切都很好,但现在我需要清除所有以".html"结尾的 URL 的所有查询参数。

这听起来可能很容易完成,但我遇到了一个我无法解决的问题。这是我用来从以 .html 结尾的 URL 中删除所有查询参数的重写规则:

RewriteRule ^/(.*).html$ /$1.html [QSD]

从技术上讲,人们可以将此重写视为实际上不是重写,因为它将原始请求发送到同一URL,但是标志QSD用于删除所有查询参数。

问题是,如果我重新加载包含此规则的 Apache 实例,我开始收到如下错误:

[Wed Jun 10 14:53:35.698908 2020] [authz_core:error] [pid 31733] [client 54.209.162.6:61649] AH01630: client denied by server configuration: /etc/clientlibs, referer: https://my.domain.com/etc/clientlibs/mygroup/some/simple/page.html

我知道有些人在从 Apache 2.2 迁移到 2.4 时遇到了这样的问题。这不是我的情况,我也检查了我的 vhost 配置。我没有来自 Apache 2.2 的指令,例如"命令拒绝,允许"或"允许所有人"。我正在使用"要求全部授予"。

AEM日志中的一件奇怪的事情是,当我的重写规则未到位时,我可以看到错误.log记录找到"/etc/clientlibs/mygroup/some/simple/page.html"。但是如果我放置规则并重新加载 Apache 时,我会从日志中看到这一点:

10.06.2020 10:16:40.085 *INFO* [54.209.162.6 [1591798600081] GET /etc/clientlibs/mygroup/some/simple/page/jcr:content.json HTTP/1.1] org.apache.sling.engine.impl.SlingRequestProcessorImpl service: Resource /etc/clientlibs/mygroup/some/simple/page/jcr:content.json not found

这就像扩展.html将从URL中剥离一样,并且由于没有扩展名,AEM或更确切地说是Sling正在尝试使用默认的内容解析器,即JSON。

为什么你只使用

RewriteRule ^ %{REQUEST_URI} [L,R,QSD]

(也许在您的情况下不需要重定向...但它使浏览器清楚(。

或者,如果您只想确保您的请求缓存在调度程序中,并且每次都传递到AEM,请使用:

/filter {
/0001 { /type "deny" /method "POST" /url "/etc/*" }
/0002 { /type "allow" /method "GET" /url "/etc/*" /query "a=*" }
}

在您的调度程序配置中(有关详细信息,请参阅第 https://docs.adobe.com/content/help/en/experience-manager-dispatcher/using/configuring/dispatcher-configuration.html 条(。

我终于能够解决我的问题了。即使我仍然不了解全貌。这是我的最终条件和规则:

RewriteCond %{QUERY_STRING} ^.
RewriteRule ^/(.*).html$ /$1.html [QSD,PT]

添加"PT"和"QSD"会使Apache不返回"客户端被拒绝"错误。围绕它的条件QUERY_STRING只是为了确保Apache只操作那些在URL中真正具有查询参数的请求,或者技术上至少有一个字符

在重写规则之前添加一个条件来跳过要应用于/etc/clientlibs 的规则怎么样?RewriteCond %{REQUEST_URI} !^/etc/clientlibs.*

相关内容

  • 没有找到相关文章

最新更新