如何为文件夹中已存在的文件编写规则以指向其他位置。例如,用于将wp-content/uploads/
文件夹中的pdf文件的任何请求重写为页面download/?q=$1
。
我在SO related question for moved pdf files中看到了以下
# checks that the request is for a file that *does not* exist
RewriteCond %{REQUEST_FILENAME} !-f
# make sure we've not already redirected to the uploads directory
# (in case it doesn't exist in there either)
RewriteCond %{REQUEST_URI} !^/wp-content/uploads/
# the rule matches against either pdf, zip or xls.
RewriteRule ([^/]*\.(pdf|zip|xls))$ /wp-content/uploads/$1 [NC,L,R=301]
但我想要相反的效果。对现有文件进行重定向,并为未存在的文件保留404。
我尝试了不同的方法而没有运气。想知道根文件夹中的WordPress的默认.htaccess
文件是否干扰了这个文件。如何将pdf的所有请求重写到自定义页面?
编辑:
.htaccess
文件位于wp-content/uploads
文件夹中。
关于WordPress Rewrite API我在自定义插件中已经有以下功能:
function add_rewrite_rules($aRules) {
$new_rules = array(
'exams/([^/]+)/([^/]+)/?$' => 'index.php?pagename=exams&type=$matches[1]&city=$matches[2]',
'exams/([^/]+)/([^/]+)/subject/([^/]+)/?$' => 'index.php?pagename=exams&type=$matches[1]&city=$matches[2]&subject=$matches[3]'
);
return $aRules + $new_rules;
}
根据我的理解,这些函数允许我们为{4}}文档中描述的WordPress指定其他重写规则。因此,它不应该影响.htaccess
文件中指定的规则的内容。
答案 0 :(得分:4)
假设您的WP安装在域的根目录上,它将是:
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} /wp-content/uploads/
RewriteRule ([^\/]+\.pdf)$ /download.php?q=$1 [NC,L,R=301]
第一行(从示例代码中删除!
)仅匹配现有文件,因此如果PDF文件不存在,您将获得标准404.
第二个条件将匹配仅限制在/wp-content/uploads/
文件夹中的现有文件,因此http://example.com/example.pdf不会被重定向。
最后,RewriteRule
(受两个先例条件影响)将上传文件夹中以.pdf
扩展名结尾的任何现有文件重定向到/downloads.php
,将文件名作为{{1}传递参数。
因此,如果q
文件夹中存在http://example.com/wp-content/uploads/2016/04/filename.pdf
,http://example.com/download.php?q=filename.pdf
将被重定向到filename.pdf
。
我已经在本地虚拟WP安装中检查了这个解决方案并且它有效,所以我希望这会有所帮助。
修改:如果上传文件夹中有/wp-content/uploads/2016/04/
,只有这样就足够了:
.htaccess
您是否尝试过在评论中提出的建议(在您的RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ([^\/]+\.pdf)$ /download.php?q=$1 [NC,L,R=301]
中添加一些垃圾来检查它是否已启用)?
另一种拍摄方式是将规则移至根.htaccess
...
答案 1 :(得分:1)
您可以在/wp-content/uploads/.htaccess中使用以下作为第一条规则:
RewriteEngine on
RewriteRule ^([^.]+\.pdf)$ /download/?q=$1 [NC,L]
这会在内部将 /wp-content/uploads/foo.pdf 重定向到 /download/?q=foo.pdf 。
如果您想将 /wp-content/uploads/foo.pdf 外部重定向到 /download/?q=foo.pdf (更改旧网址栏)位置到新位置)使用重写目标中的完整网址,例如 http://example.com/download/?q=foo.pdf 或添加 R 重定向标记 [NC,L,R] 强>