.htaccess 如何为动态生成的PDF向HTTP头添加规范标记
在我的网站上有一些文章,可以通过.htaccess 如何为动态生成的PDF向HTTP头添加规范标记,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,在我的网站上有一些文章,可以通过https://www.example.com/path/to/topic/。如果您附加一个pdf下载文件/,您将以pdf格式获得文章 现在,我想使用.htaccess为生成的PDF文件向HTTP头动态添加一个规范标记 我发现以下解决方案不适用于我: RewriteRule ([^/]+)/pdf-download/$ – [E=FILENAME:$1] <FilesMatch "/pdf-download/$"> Head
https://www.example.com/path/to/topic/
。如果您附加一个pdf下载文件/
,您将以pdf格式获得文章
现在,我想使用.htaccess
为生成的PDF文件向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>
RewriteRule([^/]+)/pdf下载/$–[E=FILENAME:$1]
标题添加链接“;rel=\“规范的”
我希望动态创建完整的域和路径。指令只匹配真实文件,而不匹配URL路径。使用RewriteRule
指令设置环境变量可以避免使用
包装器,因为头
指令可以根据是否设置了环境变量进行有条件的设置
然而,另一个复杂的问题是,我怀疑您也有一个mod_rewrite front controller模式来路由这些请求?在这种情况下,在下一轮处理(例如重定向文件名
)之前,通过前缀重定向
重命名在第一次传递时设置的环境变量(例如重定向文件名
)。因此,您需要在Header
指令中检查这个重命名的环境变量
您可以使用SetEnvIf
指令而不是RewriteRule
来设置env变量,这可以说稍微简单一些(并减少对mod_rewrite的依赖)
请注意,在您的示例中,FILENAME
env变量将包含完整的URL路径(例如,path/to/topic
)-因此这不应该像您在示例中所做的那样包含在标题
指令中
请尝试以下操作:
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
setenif请求_URI”(.+/)pdf下载/$”pdf_规范_URL=$1
标题添加链接“rel=\“canonical\”env=REDIRECT\u PDF\u canonical\u URL
setenif
指令将PDF\u CANONICAL\u URL
env变量设置为PDF下载之前的整个URL路径。此env变量包含URL路径上的斜杠前缀和后缀(如示例URL中所示)。我更改了var名称以更好地反映存储的数据
只有在设置了重定向\u PDF\u规范\u URL
环境变量时,头指令才会设置适当的HTTP响应头。如上所述,这个env变量是在第二轮重写处理时设置的
但是,如果您没有使用mod_rewrite来路由这些请求,而是使用FallbackResource
(并且没有其他mod_rewrite指令),则可能需要删除重定向前缀。(因为重写引擎没有第二次通过。)
HTTP\u HOST
服务器变量用于获取请求的HOST
头(请求的域)的值。这假设您已经在配置的前面规范化了主机名(即www与非www)。非常感谢您的详细回答!你让我开心!