1

当 Apachemod_dirDirectorySlash机制 301 请求映射到目录但缺少尾部斜杠时,它会生成类型的响应正文text/html,无论Accept:请求的标头如何。虽然我知道几乎每个客户端都会使用Location:响应中的标头来确定去哪里,但我想知道是否可以自定义响应主体以生成text/html. 在我的具体情况下,我正在获取application/rdf+xmltext/turtle请求并返回类似编码的 RDF 响应。我希望能够通过如下响应来处理这些缺失的斜线 301:

@prefix owl: <http://www.w3.org/2002/07/owl#>.
@base <http://www.example.com/>.

<resource> owl:sameAs <resource/>.

我尝试过使用重写规则并ErrorDocument在这样的.htaccess文件中:

DirectorySlash off

RewriteEngine on
RewriteOptions AllowNoSlash

# When no trailing slash, redirect to slashed path with a special ttl response body
ErrorDocument 301 /resource-see-other.ttl
RewriteCond %{HTTP:Accept} text/turtle
RewriteCond %{REQUEST_URI} ^/resource$
RewriteRule .* /resource/ [L,R=301]

# When text/turtle request with trailing slash, return resource
RewriteCond %{HTTP:Accept} text/turtle
RewriteCond %{REQUEST_URI} ^/resource/$
RewriteRule .* index.ttl [L]

这工作正常。但是一旦我需要处理其他内容类型的案例,它就会停止工作。虽然我可以毫无问题地添加另一组重写规则,但我不能重复文件ErrorDocument中的指令.htaccess;只有文件中最后一个这样的指令才会实际应用,导致所有 301 响应都获得相同的响应正文。

我想如果我不限于.htaccess我可能能够使用<Location>ErrorDocuments 彼此隔离的指令。

那么有没有办法对错误响应主体进行内容协商?

4

0 回答 0