【发布时间】:2016-10-07 06:35:16
【问题描述】:
我有一个指向上传到我网站的 PDF 的链接。我希望将人们发送到 YouTube 视频,而不是提供 PDF(不再存在,顺便说一句)。我在 .htaccess 文件中尝试过这样的事情:
RewriteEngine On
RewriteRule "Case-Study\.pdf$" "https://www.youtube.com/watch?v=dQw4w9WgXcQ" [R=301,L]
这在 URL 为 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 不起作用? (感谢您的帮助。)
【问题讨论】:
-
.htaccess 在根目录中。但是我可以很容易地在上传目录中添加一个。
-
@anubhava 试过了,还是 404。
-
@anubhava 插件如何绕过.htaccess? .htaccess 将在将请求传递给 PHP 之前由 Apache 处理,不是吗?
-
好的,一位同事想通了:因为目标文件不再存在(已重命名),Apache 没有运行 mod_rewrite 就返回了 404。显然,这可以在 Apache 中配置(不确定如何配置),并且可以解释为什么我让它在本地工作,但无法在生产服务器上通过它。感谢您的帮助。
-
Apache 配置问题与 MultiViews 和 mod_negotiate 有关。见systemcodegeeks.com/web-servers/apache/…。
标签: wordpress .htaccess redirect mod-rewrite