重定向未登录并尝试查看 pdf 的人

Redirect people who are not logged and trying to view a pdf

我知道有关于该主题的文章,但我无法使 htaccess 规则起作用。好吧,它可以工作,但前提是 PDF 位于特定文件夹中。

这是我正在尝试做的事情: 如果有人没有 wordpress_logged_in cookie 并且他们试图查看 pdf 或 ppt,那么我们会将他们重定向到登录页面。

这是我当前的 htaccess :

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteCond %{HTTP_COOKIE} !wordpress_logged_in [NC]
RewriteRule ^wp-content/uploads/.+?\.(pdf|ppt)$ wp-login.php?redirect_to=/ [R,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

没用。

如果我尝试访问 /uploads/2022/05/blabla.pdf 而不是 /wp-content/uploads/2022/05/blabla.pdf

,则下一个有效
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteCond %{HTTP_COOKIE} !wordpress_logged_in [NC]
RewriteRule (^|/)uploads/.+?\.(pdf|ppt)$ wp-login.php?redirect_to=/ [R,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

为什么如果我添加“^wp-content/”它根本不起作用?

编辑: /wp-content/ 中还有另一个 .htaccess 可能有冲突?

# BEGIN WebP Converter
# ! --- DO NOT EDIT PREVIOUS LINE --- !
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP_ACCEPT} image/webp
  RewriteCond %{DOCUMENT_ROOT}/wp-content/uploads-webpc/.jpg.webp -f
  RewriteRule (.+)\.jpg$ /wp-content/uploads-webpc/.jpg.webp [NC,T=image/webp,L]
  RewriteCond %{HTTP_ACCEPT} image/webp
  RewriteCond %{DOCUMENT_ROOT}/wp-content/uploads-webpc/.jpeg.webp -f
  RewriteRule (.+)\.jpeg$ /wp-content/uploads-webpc/.jpeg.webp [NC,T=image/webp,>
  RewriteCond %{HTTP_ACCEPT} image/webp
  RewriteCond %{DOCUMENT_ROOT}/wp-content/uploads-webpc/.png.webp -f
  RewriteRule (.+)\.png$ /wp-content/uploads-webpc/.png.webp [NC,T=image/webp,L]
</IfModule>
<IfModule mod_headers.c>
  <FilesMatch "(?i)\.(jpg|jpeg|png)(\.(webp|avif))?$">
    Header always set Cache-Control "private"
    Header append Vary "Accept"
  </FilesMatch>
</IfModule>
# ! --- DO NOT EDIT NEXT LINE --- !
# END WebP Converter

Edit : There is another .htaccess in /wp-content/ maybe some conflict?

/wp-content/.htaccess 中的 mod_rewrite 指令将完全覆盖父 .htaccess 文件中的 mod_rewrite 指令。父 .htaccess 文件中的 mod_rewrite 指令(和您的重写)甚至没有被处理。

您需要(为了易于实施):

  • 重复 /wp-content/.htaccess 文件顶部的规则( # BEGIN WebP Converter 行之前)- 尽管需要作相应调整。例如:

    RewriteCond %{HTTP_COOKIE} !wordpress_logged_in [NC]
    RewriteRule ^uploads/.+\.(pdf|ppt)$ /wp-login.php?redirect_to=/ [R,L]
    

    请注意 RewriteRule 模式 现在开始 ^uploads,而不是 ^wp-content 替换 字符串以斜杠为前缀。

    不需要 non-greedy 量词。 .+(而不是 .+?)就足够了。

  • /wp-content/.htaccess 文件的内容移动到父配置中 - 进行必要的调整。 (尽管这可能还需要自定义“WebP 插件”。)

  • /wp-content/.htaccess(或根 .htaccess)文件中启用 mod_rewrite 继承。但这确实使事情复杂化,需要重写指令以解决这个问题。