.htaccess 添加自定义 Header 到文件指令匹配模式
.htaccess add Custom Header to File directive matching pattern
我的网站上有许多以数字结尾的 pdf,尽管它们是相同的 pdf。
我想通过 .htaccess(使用 Files 或 FilesMatch)向以数字结尾的 pdf 添加 Canonical Link 到相应的 pdf
我认为模式需要是 {anything}-{digit}.pdf
例如:
<Files my-pdf-name-ends-with-1.pdf>
Header add Link '<https://www.website.com/pdf/my-pdf-name-ends-with.pdf>; rel="canonical"'
</Files>
<Files my-pdf-name-ends-with-2.pdf>
Header add Link '<https://www.website.com/pdf/my-pdf-name-ends-with.pdf>; rel="canonical"'
</Files>
<Files newpdf45-that-ends-with-2.pdf>
Header add Link '<https://www.website.com/pdf/newpdf45-that-ends-with.pdf>; rel="canonical"'
</Files>
<Files newpdf45-that-ends-with-77.pdf>
Header add Link '<https://www.website.com/pdf/newpdf45-that-ends-with.pdf>; rel="canonical"'
</Files>
<Files other-pdf-name-that-ends-with-digit-45.pdf>
Header add Link '<https://www.website.com/pdf/other-pdf-name-that-ends-with-digit.pdf>; rel="canonical"'
</Files>
<Files other-pdf-name-that-ends-with-digit-34.pdf>
Header add Link '<https://www.website.com/pdf/other-pdf-name-that-ends-with-digit.pdf>; rel="canonical"'
</Files>
谢谢!
要根据请求的文件名动态添加header link,你可以使用这个
<FilesMatch "^(?<uripart[^0-9]+)[0-9]+\.pdf$">
Header add Link '<https://www.website.com/pdf/%{env:MATCH_URIPART}.pdf >;rel="canonical"'
</FilesMatch>
uripart
是我们从请求的 pdf 文件中捕获的 uri 字符串的一部分,我们使用 ENV:MATCH
变量在 header 目标中使用它。
我的解决方案
<FilesMatch "^(?<uripart>[^0-9]+)(-)[0-9]+\.pdf$">
<If "%{REQUEST_URI} =~ m#^/path/to/pdfs/#">
RewriteRule .* - [E=FILENAME:https://%{HTTP_HOST}/path/to/pdfs/%{ENV:MATCH_URIPART}\.pdf]
Header set Link '<%{FILENAME}e>; rel="canonical"'
</If>
</FilesMatch>
<FilesMatch "^(?<uripart>[^0-9]+)\.pdf$">
<If "%{REQUEST_URI} =~ m#^/path/to/pdfs/#">
RewriteRule .* - [E=FILENAME:https://%{HTTP_HOST}%{REQUEST_URI}]
Header set Link '<%{FILENAME}e>; rel="canonical"'
</If>
</FilesMatch>
我的网站上有许多以数字结尾的 pdf,尽管它们是相同的 pdf。
我想通过 .htaccess(使用 Files 或 FilesMatch)向以数字结尾的 pdf 添加 Canonical Link 到相应的 pdf
我认为模式需要是 {anything}-{digit}.pdf
例如:
<Files my-pdf-name-ends-with-1.pdf>
Header add Link '<https://www.website.com/pdf/my-pdf-name-ends-with.pdf>; rel="canonical"'
</Files>
<Files my-pdf-name-ends-with-2.pdf>
Header add Link '<https://www.website.com/pdf/my-pdf-name-ends-with.pdf>; rel="canonical"'
</Files>
<Files newpdf45-that-ends-with-2.pdf>
Header add Link '<https://www.website.com/pdf/newpdf45-that-ends-with.pdf>; rel="canonical"'
</Files>
<Files newpdf45-that-ends-with-77.pdf>
Header add Link '<https://www.website.com/pdf/newpdf45-that-ends-with.pdf>; rel="canonical"'
</Files>
<Files other-pdf-name-that-ends-with-digit-45.pdf>
Header add Link '<https://www.website.com/pdf/other-pdf-name-that-ends-with-digit.pdf>; rel="canonical"'
</Files>
<Files other-pdf-name-that-ends-with-digit-34.pdf>
Header add Link '<https://www.website.com/pdf/other-pdf-name-that-ends-with-digit.pdf>; rel="canonical"'
</Files>
谢谢!
要根据请求的文件名动态添加header link,你可以使用这个
<FilesMatch "^(?<uripart[^0-9]+)[0-9]+\.pdf$">
Header add Link '<https://www.website.com/pdf/%{env:MATCH_URIPART}.pdf >;rel="canonical"'
</FilesMatch>
uripart
是我们从请求的 pdf 文件中捕获的 uri 字符串的一部分,我们使用 ENV:MATCH
变量在 header 目标中使用它。
我的解决方案
<FilesMatch "^(?<uripart>[^0-9]+)(-)[0-9]+\.pdf$">
<If "%{REQUEST_URI} =~ m#^/path/to/pdfs/#">
RewriteRule .* - [E=FILENAME:https://%{HTTP_HOST}/path/to/pdfs/%{ENV:MATCH_URIPART}\.pdf]
Header set Link '<%{FILENAME}e>; rel="canonical"'
</If>
</FilesMatch>
<FilesMatch "^(?<uripart>[^0-9]+)\.pdf$">
<If "%{REQUEST_URI} =~ m#^/path/to/pdfs/#">
RewriteRule .* - [E=FILENAME:https://%{HTTP_HOST}%{REQUEST_URI}]
Header set Link '<%{FILENAME}e>; rel="canonical"'
</If>
</FilesMatch>