使用环境变量和重定向循环强制清除 301 重定向

使用环境变量和重定向循环强制清除 301 重定向

我们错误地在一个非常重要的页面上使用了 301 重定向,现在我们想要实际使用该页面,但许多用户的浏览器的缓存中都滞留了 301。问题是重定向的目的地是网站的根目录,因此我们不能盲目地将其 301 重定向回去以破坏缓存。

我正在尝试使用第三个 URL 和环境变量来强制重定向循环,这将导致浏览器再次检查服务器。旧的 301 已被删除,但我将其包括在内(注释掉)以供参考。

我似乎遇到的问题是我尝试设置的环境变量似乎被完全忽略/从未设置,因此 RewriteCond 从不允许规则的其余部分生效。

RewriteEngine On

#fix /investments 301 redirect:
<IfModule mod_rewrite.c>
RewriteBase /

# This DOES work, I can see TEST_ENV and REDIRECT_TEST_ENV set in the SERVER variable:
# RewriteRule .* - [E=TEST_ENV:TEST,NE] 

# The original rule that got us into trouble:
# RewriteRule ^investments\/?$ / [R=301,L]

# Just to be safe, set env variable again at the /investments/ route:
RewriteRule ^investments\/?$ - [E=INVESTMENTSFIX:1]

# 3rd URL is all-investments, and I want to redirect to the problem URL, where it will then go into a redirect loop
RewriteRule ^all-investments/?$ /investments/ [R=301,NC,E=INVESTMENTSFIX:1,L]

# If you land on the homepage with the env variable set, set headers to not cache, redirect back to /investments, which will cause a loop. The browser should then check the server and find that the 301 for /investments no longer applies
<If "%{ENV:INVESTMENTSFIX} == 1">
Header set Cache-Control "no-cache, must-revalidate"
Header set Pragma "no-cache"
Header set Expires 0
RewriteRule ^/?$ /investments/ [R=301,NC,L]
</If>

# fix homepage once the other rules work??:
# RewriteCond %{ENV:REDIRECT_INVESTMENTSFIX} !1
# RewriteRule ^/$ / [R=301,NC,L]
</IfModule>

本地服务器设置:

  • 微软XAMPP
  • Apache/2.4.56(Win64)
  • PHP/8.1.17
  • OpenSSL/1.1.1t

如果环境变量不是解决问题的办法,那么更好的解决方案是什么?我们真的很想挽救这个 URL,因为它也是网站大部分内容的父路由。我们没有意识到 301 重定向是如此永久(意味着浏览器不会再验证重定向)。

相关内容