重定向未登录并尝试查看 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 继承。但这确实使事情复杂化,需要重写指令以解决这个问题。
我知道有关于该主题的文章,但我无法使 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 继承。但这确实使事情复杂化,需要重写指令以解决这个问题。