2012-12-06 60 views
0

我在htaccess的兩個重定向規則: 規則1 用戶來自domain1.com到main-domain.com重定向到main-domain.com/dir1/ 第2 對main-domain.com/dir2/的任何請求 - >重定向到 - > somethingelese.com/something/重定向只有一次htaccess的

單獨每個規則按照預期工作。 但是,根據規則1從domain1.com重定向到main-domain.com之後,主要問題是基於「domain1.com」的引薦值重定向一次,該引用值不會被丟棄,並且對於接下來的每個請求都會返回到main-domain。它只是重定向到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] 

更多:信息: 問題,我發現在瀏覽器的緩存重定向。任何解決方法?

回答

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。在狀態碼here


更多信息你可以做到這一點也從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); 
} 
+0

對不起,這不起作用。基於referrer的相同重定向! – coderplusplus

+0

好的,對不起,我會檢查它,我會嘗試糾正我的答案。 – lupatus

+0

即使在R = 302之後仍然存在相同的問題...瀏覽器正在緩存重定向。我有任何工作場所,否則使用JS/PHP。? – coderplusplus

0

你重寫之前,添加一個Vary標頭,使瀏覽器知道這一反應可能不一致,而不是緩存它。

Header set Vary "*" 
+0

好吧,我會嘗試,它會需要mod_deflate? – coderplusplus

+0

只是mod_headers –