php - 如果未登录,用户将被重定向到“我的帐户”页面。如果已登录,仍然会被重定向。缓存重定向?
问题描述
我在我的 functions.php 中添加了代码,如果他们尝试访问任何 Woocommerce 页面,则将用户重定向到我的帐户页面。
add_action('template_redirect', 'wc_redirect_non_logged_to_login_access');
函数 wc_redirect_non_logged_to_login_access() {
if ( !is_user_logged_in() && ( is_woocommerce() || is_shop() || is_cart() || is_checkout() ) ) {
wp_redirect( get_permalink( get_option('woocommerce_myaccount_page_id')) );
exit();
}}
一切正常 - 用户尝试访问 Shop 页面,他们确实获得了重定向到 My Account 页面,登录后他们可以访问 Shop。
当我迁移到 WP Engine 时,问题就开始了。现在,如果用户访问 Shop 页面,被重定向到 My Account,登录并尝试访问 Shop - 他仍然会被重定向到 My Account。
我联系了 WP Engine,他们添加了下面列出的 Woocommerce 缓存排除项:
^/cart/
^/my-account/
^/checkout/
^/product-category/
^/product/
^/wc-api/
^/resetpassword/
product
wc-api=
woocommerce_cart_hash
woocommerce_items_in_cart
Wp_woocommerce_session_
wp-resetpass-
但问题仍然存在。
域通过 Cloudflare,所以我免除了这条路径的缓存。所以我为 /my-account/ 页面制定了页面规则 - 缓存级别 - 绕过,但问题仍然存在。这是我的页面规则:https ://ibb.co/28k84cM
之后,我做了一个小实验,并添加了一个由 WP Engine 托管的测试站点 ( https://residenceineu.wpengine.com/ )。DNS 不会通过 Cloudflare。一切都在 WP Engine 上 - 托管和域。结果,问题并没有消失。因此,我认为 WP Engine 有问题。
这是响应式标头信息的屏幕截图:https ://ibb.co/dMwQ8t5
通过,当我在浏览器检查设置中禁用浏览器缓存时,问题消失了。
有趣的一点是,当代码添加到functions.php时,如果我们首先访问我的帐户页面(没有点击商店页面)然后登录,登录后我们访问商店页面,我们可以访问它 - 没有重定向,一切正常。问题从我们第一次访问商店页面开始,然后被重定向到我的帐户,登录后我们尝试再次访问商店页面。
总结一下——当我们访问“我的帐户”页面然后转到“商店”页面时——没有缓存/重定向,一切正常。如果我们通过访问 Shop 页面以其他方式执行此操作 - 被重定向到我的帐户 - 登录 - 尝试访问 Sho 页面 = 再次被重定向到我的帐户,即使已登录。所以考虑到所有这些,似乎整个重定向如果我们在没有登录的情况下先访问 Shop 页面,进程会被缓存。
我正在与 WP Engine 支持人员联系,但我们仍然没有解决方案。
有任何想法吗?也许在迁移到 WP Engine 之后,他们会自动在 wp-config.php 或 .htaccess 文件中重写一些内容?
谢谢!
解决方案
WP Engine 专门从缓存中排除 /shop/ 路径。这解决了这个问题。
推荐阅读
- java - 在日期范围内搜索时没有价值
- sorting - 按长度递增的顺序返回子列表
- raspberry-pi - 如何从 Raspberry Pi 上的 Android Things 中提取程序/代码?
- angularjs - 为什么在导入扩展名为 .ts 的 polyfills 文件时,webpack 构建时间会更快?
- amazon-web-services - 有没有办法使用 aws chime 从网页创建手机呼叫?
- elasticsearch - 尝试创建索引时出现 ElasticSearch Nest 异常 (Elasticsearch.Net.UnexpectedElasticsearchClientException) (Nest 7.12.0)
- selenium - AWS Device Farm 上基于浏览器的性能测试
- reactjs - 如何查看部署在谷歌应用引擎标准环境中的nexjs项目的日志?
- python - 从书中复制代码,但它不会显示输出
- amazon-web-services - AWS Glue - 如何连接到 DevEndpoint