0

我有一个小问题。我的一个客户最近向 6500 人发送了一封电子邮件,其中包含指向 PDF 文件的无效链接。

链接很简单:http ://theirsite.com/pdf/thepdf.pdf%20

所以,我希望能够为他们做一个 htaccess 重写到有效的http://theirsite.com/pdf/thepdf.pdf文件

到目前为止,我尝试过的一切都不起作用。

这是我迄今为止尝试过的:

RewriteRule ^(/pdf/thepdf.pdf[%20|\s]+)$ /pdf/thepdf.pdf [R=301,L]

RewriteRule /pdf/thepdf.pdf([%20|\s]+)$ /pdf/thepdf.pdf [R=301,L]

RewriteRule /pdf/thepdf.pdf%20 /pdf/thepdf.pdf [R=301,L]

RewriteRule /pdf/thepdf.pdf%20 /pdf/thepdf.pdf [R=301,L]
RewriteRule /pdf/thepdf.pdf  /pdf/thepdf.pdf [R=301,L]

RewriteRule /pdf/thepdf.pdf(.+?) /pdf/thepdf.pdf [R=301,L]

这里需要注意的是,如果我单击原始链接,但删除 %20 并放入一个空格,则重写工作。

只是不适用于 %20

4

2 回答 2

2

由于这是 .htaccess,因此在匹配规则的开头不应有强制性的正斜杠。尝试这个:

RewriteEngine On
RewriteRule ^/?pdf/thepdf\.pdf\s+$ /pdf/thepdf.pdf [R=301,L]

笔记:

  • 我将 a/?放在匹配规则的开头,因为这是使规则在主机配置上下文或 .htaccess 上下文中工作的良好常规做法。因为/如果此规则在主机配置中,则需要 a。
  • 您应该转义.之前,.pdf否则它将充当通配符匹配。
  • 我在匹配的开头和结尾添加了锚 (^$) 以确保它匹配整个资源字符串
于 2013-05-21T19:35:28.263 回答
0

%20(.+?)是一个 URL 编码空间,因此您可以在.htaccess文件中使用惰性选择。

RewriteEngine On
RewriteBase /
RewriteRule /pdf/thepdf.pdf(.+?) /pdf/thepdf.pdf [L]

这些规则应该正常工作。

于 2013-05-21T18:24:33.310 回答