.htaccess重写规则可能性?

时间:2013-05-21 18:16:03

标签: apache .htaccess

我有一点问题。我的一位客户最近向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

2 个答案:

答案 0 :(得分:2)

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

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

注意:

  • 我在匹配规则的开头添加了/?,因为这是一个很好的通用做法,可以使规则在主机配置上下文或.htaccess上下文中工作。如果此规则在主机配置中,则需要/
  • 您应该在.之前转义.pdf,否则它将作为通配符匹配。
  • 我在匹配的开头和结尾添加了锚(^$),以确保匹配整个资源字符串

答案 1 :(得分:0)

%20是一个网址编码空间,因此您可以在(.+?)文件中使用延迟选择.htaccess

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

这些规则通常应该有效。