0

我在 htaccess 中有两个重定向规则: 规则 1. 用户来自 domain1.com 到 main-domain.com 重定向到 main-domain.com/dir1/ 规则 2. 对 main-domain.com/dir2/ 的任何请求 - > 重定向到 --> somethingelese.com/something/

单独每个规则都按方面工作。但主要问题是在根据“domain1.com”的推荐值根据规则 1 从 domain1.com 重定向到 main-domain.com 之后,该推荐值不会被丢弃,并且对于 main-domain.com 的每个下一个请求它仅重定向到 main-domain.com/dir1/ 。我想要的是根据应该丢弃的推荐只重定向一次之后。并且不应该干涉 main-domain.com 。

这是代码:

Options +FollowSymLinks
RewriteEngine on

RewriteCond %{HTTP_REFERER} ^(.*)domain1\.com [NC]
RewriteRule !dir1 http://main-domain.com/dir1 [R=301,L]

RewriteCond %{REQUEST_URI} ^/dir2/.* [NC]
RewriteRule dir2/(.*) https://somethingelse.com/mfn/$1 [R=301,L]

更多:信息: 我发现的问题是浏览器正在缓存重定向。有什么解决方法吗?

4

2 回答 2

0
Options +FollowSymLinks
RewriteEngine on

RewriteCond %{HTTP_HOST} !main-domain.com$ [NC]
RewriteCond %{HTTP_REFERER} ^.*domain1\.com [NC]
RewriteRule !^dir1 http://main-domain.com/dir1 [R,L]

RewriteCond %{REQUEST_URI} ^/dir2(/.*)? [NC]
RewriteRule dir2(/(.*))? https://somethingelse.com/mfn$1 [R,L]

更多:信息:我发现的问题是浏览器正在缓存重定向。有什么解决方法吗?

这里的问题可能是状态码 301,这意味着Moved PermanentlyThis response is cacheable unless indicated otherwise。为了避免这种使用302 Found。更多关于状态码的信息在这里


您也可以从 PHP 中执行此操作(从评论中回答问题):

if (isset($_SERVER['HTTP_REFERER']) && preg_match('/^.*domain1\.com/', $_SERVER['HTTP_REFERER']) &&
    !preg_match('/main\-domain\.com$/', $_SERVER['HTTP_HOST']) &&
    !preg_match('/^\/dir1/', $_SERVER['REQUEST_URI'])) {
    header('Location: http://main-domain.com/dir1');
    exit(0);
}
if (preg_match('/^\/dir2/', $_SERVER['REQUEST_URI'])) {
    header('Location: https://somethingelse.com/mfn' . substr($_SERVER['REQUEST_URI'], 4));
    exit(0);
}
于 2012-12-06T16:27:24.860 回答
0

在重写之前,添加一个 Vary 标头,以便浏览器知道响应可能不一致,而不是缓存它。

Header set Vary "*"
于 2012-12-08T01:31:08.353 回答