RewriteCond %{HTTP_COOKIE} !.*wordpress_logged_in.*$ [NC]
RewriteCond %{REQUEST_URI} ^(.*?/?)purchase.php
RewriteRule . https://%{HTTP_HOST}%1/registrationurl [L,QSA]
这将导致302(临时)重定向到
/purchaseads//registrationurl - 请注意双斜杠。此双斜杠传递给
$_SERVER[\'REQUEST_URI\'] WordPress用于路由URL的变量。因此,这可能导致WP无法路由请求。
您需要从捕获的子模式中删除可选的斜杠分隔符。即更改^(.*?/?)purchase.php 到^(.*?)/?purchase\\.php$ (不要忘记反斜杠转义文字点)。
不需要检查URL路径的第二个条件-应在RewriteRule 模式:
RewriteCond %{HTTP_COOKIE} !wordpress_logged_in
RewriteRule ^(.*?)/?purchase\\.php$ /$1/registrationurl [R=302,L]
您的原始指令会隐式触发302重定向(因为您在替换字符串中包含了一个绝对URL),但是,您应该显式地包含
R 旗帜(您需要包括
R 目标URL表示为根相对URL时的标志。)
这个QSA 此处不需要标志。也不是NC 标记前面的条件。!wordpress_logged_in 与相同!.*wordpress_logged_in.*$.
这些指令也应该放在.htaccess 文件,以确保没有冲突。
不确定这种方法是否足够安全。
是否为;“足够安全”;取决于后果。
如果不发生此重定向,会发生什么情况?是否会暴露任何信息或采取关键行动?
只需检查字符串wordpress_logged_in 不会出现在任何地方(不仅仅是名称中包含“wordpress\\u logged\\u登录”的cookie)在Cookie 标头无法可靠地检查用户是否未登录。恶意用户构建绕过此检查的请求相对来说是微不足道的。
您无法可靠地确定用户是否使用.htaccess.