我在野外有一个指向上传到我网站的PDF的链接。我希望将人们发送到YouTube视频,而不是提供PDF(不再存在,顺便说一句)。我在.htaccess文件中尝试过类似的东西:
RewriteEngine On
RewriteRule "Case-Study\.pdf$" "https://www.youtube.com/watch?v=dQw4w9WgXcQ" [R=301,L]
这适用于网址为https://example.com/Case-Study.pdf
的情况,但不适用于https://example.com/wp-content/uploads/2016/09/Case-Study.pdf
。当然,后者是需要重定向的URL。
.htaccess文件的其余部分如下所示:
# BEGIN GD-SSL
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteRule "Case-Study\.pdf$" "https://www.youtube.com/watch?v=dQw4w9WgXcQ" [R=301,L]
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_USER_AGENT} ^(.+)$
RewriteCond %{SERVER_NAME} ^example\.com$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
# Header add Strict-Transport-Security "max-age=300"
</IfModule>
# END GD-SSL
RewriteEngine on
RewriteRule ^/contact$ https://example.com/#contact [R=301,L]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
php_value post_max_size 128M
php_value upload_max_filesize 64M
# END WordPress
那么,为什么我的RewriteRule不工作? (感谢您的帮助。)
答案 0 :(得分:0)
事实证明mod-rewrite可以被另一个模块破坏:mod_negotiation。如果您使用协商的MultiViews选项,则在转到mod_rewrite之前,它可以为丢失的文件返回404.
所以上面的RewriteRule适用于那里的文件;或者使用不存在的文件,但是在没有启用MultiView的服务器上工作。
在此详细解释:https://www.systemcodegeeks.com/web-servers/apache/apache-multiviews-mod_rewrite/