Apache - 使用空格重定向301 pdf到pdf(二进制文件)

med*_*iev 2 apache mod-rewrite mod-alias http-status-code-301

我想要的是:

301将/file_new.pdf重定向到/ file new.pdf(%20又名文件和新文件之间的空格)

我知道:

  • 我可以依赖使用mod_rewrite的RewriteRule 301,使用来自这个线程的解决方案:@ mod_rewrite在url中包含空格
  • 我可以将文件重命名为不包含空格,并用短划线/下划线替换它们

但是,我个人很好奇如何做到这一点.这是我到目前为止所拥有的:

Redirect 301 /file_new.pdf http://sitename.com/file\ new.pdf
Run Code Online (Sandbox Code Playgroud)

调用configtest时,conf文件解析器会抛出错误:

重定向需要两个或三个参数,一个可选状态,然后是要重定向的文档和目标URL

编辑:显然mod_rewrite和Redirect 301方法对我有效,可能是因为无论出于什么原因他们没有应用,因为该文件实际存在于该位置.

<VirtualHost *:80>
DocumentRoot /www/sitename_com
ServerName site.local
Options -MultiViews

RewriteEngine on
Redirect 301 /pdf/file_new.pdf http://site.local/pdf/file%20new.pdf
RewriteRule ^/pdf/file_new.pdf http://site.local/pdf/file\ new.pdf
RewriteLog "/www/rewrite.log"
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

在rewrite.log中,它尝试将模式匹配到每个相应的uri/http请求.我认为有些东西在它甚至到达mod_alias/mod_rewrite之前就已经控制了.

总而言之,它直接转到浏览器中的file_new.pdf而不是301.我很肯定alias并且rewrite已启用.我的apache版本是2.2.

jni*_*959 5

Redirect实际上是mod_alias中,没有mod_rewrite的一部分.我很高兴%20工作,你也可以使用引号告诉apache包含空格的路径是重定向到的URL而不是两个单独的项:

Redirect 301 /pdf/file_new.pdf "http://site.local/pdf/file new.pdf"
Run Code Online (Sandbox Code Playgroud)