私は、多言語および多国語のサイトで作業しています。これは、ユーザーが最初にサイトにアクセスしたときに設定された国別Cookieに応じて、ページに表示されるコンテンツが異なることを意味します。 cookieの値には分類のtidを使用したため、大文字と小文字の区別などの問題はありませんでした。
問題は、Drupalのcache_pageテーブルがコンテンツをURLのみで索引付けするため、国が異なるが同じURLのユーザーはすべて同じコンテンツを取得することです。 mod_rewriteの実装を変更するだけで、必要な効果を得ることができました。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} !(cid)
RewriteCond %{HTTP_COOKIE} (?:^|;\s*)country=([^;]*)
RewriteRule ^(.*)$ $1?cid=%1&%{QUERY_STRING} [L,R=302]
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{HTTP_COOKIE} (?:^|;\s*)country=([^;]*)
RewriteRule ^$ /?cid=%1 [L,R=302]
# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
ExpiresDefaultディレクティブを無効にする必要がありました。ユーザーが国を切り替えたときに、ブラウザーが古いコンテンツを記憶していたためです。
Cache_pageテーブルの結果のcidは次のようになります。
http://example.com/pagename?cid=98
http://example.com/pagename?cid=256
この投稿は、「困ったときに助けて」というよりも、「この問題が発生したので、ここで解決しました。これを行うためのより良い方法を考えていただけますか?」
.htaccessルールがなくても実行できます。
Drupalコアキャッシュ。 settings.phpファイルで変更します(Apacheのみ)。から http://drupal.org/node/361832#comment-4204294
<?php
// Check if cookie is set.
if (!empty($_COOKIE['my_cookie'])) {
// Add cookie value to page cache id.
$_SERVER['REQUEST_URI'] .= '#' . $_COOKIE['my_cookie'];
}
// Disable page cache if cookie not set so your magic code can set the cookie.
else {
$conf['cache'] = CACHE_DISABLED;
}
?>