将未登录用户重定向到.htaccess文件中的自定义注册/登录页面的规则

时间:2021-01-18 作者:john zuh

我正在尝试从"/purchaseads/purchase.php" 自定义注册/登录url"/purchaseads/registrationurl"在wordpress网站上。不幸的是,当访问url时"/purchaseads/purchase.php" 即使是未登录的用户,也不会更改任何内容,不会重定向到自定义注册/登录表单。

这个我使用的httaccess代码段如下

RewriteCond %{HTTP_COOKIE} !.*wordpress_logged_in.*$ [NC] 
RewriteCond %{REQUEST_URI} ^(.*?/?)purchase.php 
RewriteRule . https://%{HTTP_HOST}%1/registrationurl [L,QSA]
我正在检查此cookie是否已设置"wordpress_logged_in" 如果没有,则重定向到自定义注册/登录url。不确定这种方法是否足够安全。也许有更好的方法来验证。可能缺少什么?

1 个回复
最合适的回答,由SO网友:MrWhite 整理而成

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.

相关推荐

Redirecting from login

我希望我的站点在登录到site\\u url(“/”)后,为除“administrator”之外的所有用户重定向。我还希望admin\\u栏显示特定角色ie event\\u planner。除了当和event\\u planner登录并单击管理栏进入管理时,它会重定向到“/”之外,其他功能都正常工作。用于重定向的挂钩是“admin\\u init”,这显然是错误的。是否有另一个钩子可以用来在登录时重定向到/而不是在按下管理栏上的仪表板时重定向。谢谢