0

htaccess には次の 2 つのリダイレクト ルールがあります。 > リダイレクト --> 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]

詳細: 情報: 私が見つけた問題は、 Browsers are caching redirects です。これに関する回避策はありますか?

4

2 に答える 2

0

書き換える前に、Vary ヘッダーを追加して、ブラウザーが応答が一貫していない可能性があることを認識し、キャッシュしないようにします。

Header set Vary "*"
于 2012-12-08T01:31:08.353 に答える
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]

詳細: 情報: 私が見つけた問題は、 Browsers are caching redirects です。これに関する回避策はありますか?

ここでの問題は、おそらくステータス コード 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 に答える