如何解决如何将Canonical标签添加到HTTP标头中以动态生成PDF
在我的网站上有一些文章,可以通过诸如https://www.example.com/path/to/topic/
之类的URL进行访问。如果您附加pdf-download/
,则该文章将以PDF格式提供。
现在,我想使用.htaccess为生成的PDF文件动态地将Canonical标签添加到HTTP标头中。
我找到了以下解决方案,该解决方案对我不起作用:
RewriteRule ([^/]+)/pdf-download/$ – [E=FILENAME:$1]
<FilesMatch "/pdf-download/$">
Header add Link "< https://www.example.com/path/to/topic/%{FILENAME}e >; rel=\"canonical\""
</FilesMatch>
我想拥有完整的域和动态路径。
解决方法
<FilesMatch>
指令仅匹配真实文件,而不匹配URL路径。使用RewriteRule
伪指令设置环境变量可避免使用<FilesMatch>
包装器,因为Header
伪指令可根据是否设置env var有条件地进行设置。 / p>
但是,另外一个复杂的问题是,我怀疑您还具有用于路由这些请求的mod_rewrite前控制器模式?在这种情况下,在下一轮处理(例如FILENAME
)之前,通过在前缀REDIRECT_
之前重命名在第一遍设置的环境变量(例如REDIRECT_FILENAME
)。因此,这是您需要在Header
指令中检查的已重命名的env var。
您可以使用SetEnvIf
指令而不是RewriteRule
来设置env var,这可以说更简单一些(并减少了对mod_rewrite的依赖性)。
请注意,在您的示例中,FILENAME
环境变量将包含完整的URL路径(例如path/to/topic
)-因此,不应将其包含在Header
指令中,就像您在示例中一样。
请尝试以下操作:
SetEnvIf Request_URI "(.+/)pdf-download/$" PDF_CANONICAL_URL=$1
Header add Link "<https://%{HTTP_HOST}e%{REDIRECT_PDF_CANONICAL_URL}e>; rel=\"canonical\"" env=REDIRECT_PDF_CANONICAL_URL
SetEnvIf
伪指令将PDF_CANONICAL_URL
env var设置为整个URL路径 pdf-download/
。该env var在URL路径中包含斜杠前缀和后缀(如您的示例URL)。我更改了var名称以更好地反映所存储的数据。
仅在设置Header
env var的情况下,REDIRECT_PDF_CANONICAL_URL
指令才设置适当的HTTP响应标头。如上所述,此环境变量是在重写处理的第二轮中设置的。
但是,如果您不使用mod_rewrite路由这些请求,而是使用FallbackResource
(并且没有其他mod_rewrite指令),则可能需要删除REDIRECT_
前缀。 (因为重写引擎将没有第二次通过。)
HTTP_HOST
服务器变量用于获取请求的Host
标头(所请求的域)的值。假设您已经在配置中更早地对主机名(即www与非www)进行了规范化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。