因此,我的问题是:这是一个合理的担忧,还是会在 24-48 小时内获取新链接?
如果您使用 301(永久)从外部重定向客户端,您可以更快地实现它。这比在服务器端内部重写要棘手得多,因为您会导致规则冲突。例如,如果您想在服务器内部将 url-a 重写为 url-b,则将浏览器从 url-b 重定向到 url-a(意味着当客户端专门请求 url-b 将其重定向到 url-a 时) :
# internally rewrite url-a (fake URL) to url-b (where the actual content is)
RewriteRule ^url-a$ /url-b [L]
# externally redirect url-b (actual content) to url-a (fake URL)
RewriteRule ^url-b$ /url-a [L,R=301]
由于重写引擎循环,这两条规则将继续相互重写并导致 500 内部服务器错误(如果将第二条规则替换为 a ,也会发生同样的事情RedirectMatch
)。要解决此问题,您需要创建一个条件,以便仅当实际请求是针对 "url-b"时才应用外部重定向(第二条规则)。您可以通过匹配%{THE_REQUEST}
变量来做到这一点,该变量本质上是 HTTP 请求的第一行。
使用您的示例 URL,您将拥有如下内容:
RewriteRule ^contact-us/?$ /departments.php?dep=contact_us [L]
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /departments\.php\?dep=contact_us
RewriteRule ^ /contact-us/ [L,R=301]
这意味着当像 google-bot 这样的人尝试解析http://www.website.com/departments.php?dep=contact_us
时,第二条规则的条件将匹配请求(看起来像GET /departments.php?dep=contact_us HTTP/1.1
:),并且它会被重定向到http://www.website.com/contact-us/
. 此时,客户端(google-bot)将请求/contact-us/
并应用第一条规则并将 URI 内部重写为/departments.php?dep=contact_us
.