こんにちは、.htaccess で 2 つのことを達成するのに苦労しています。おそらくそれぞれで同じ問題です。
またはと呼ばsite-version
れるCookie を正常に設定しています。au
us
Cookie が設定されている場合、http://www.example.comとhttp://www.example.com/を (内部的に) http://www.example.com/home-au.html ( cookie site-version=au の場合)。また、環境変数 SITE_VERSION=au を設定したいと考えています。
RewriteCond %{HTTP_COOKIE} site-version=(au|us) [NC]
RewriteRule ^/?$ /home-%1.html [NC,QSA,E=SITE_VERSION:%1]
問題は、RewriteRule の正規表現にあるようです。これを に設定すると.*
、ループをあきらめると、環境変数が正常に設定されたように見えますが、それでもリクエストは書き換えられません。
URL がhttp://www.example.com/a-specific-page.htmlまたはhttp://www.example.com/another-specific-page.htmlで、Cookie が設定されている場合にリダイレクトしたいhttp://www.example.com/a-specific-page-au.htmlまたはhttp://www.example.com/another-specific-page-au.html、つまり-au
ファイル名に を追加します。(そして環境変数を設定します。)
RewriteCond %{THE_REQUEST} ^(a-specific-page|another-specific-page)\.html$ [NC]
RewriteCond %{HTTP_COOKIE} site-version=au [NC]
RewriteRule ^(.*)\.html$ /$1-au.html [QSA,E=SITE_VERSION:au]
後で htaccess でこれらの URL を再度翻訳するので、L フラグは必要ありませんが、次のことも試しました。
RewriteRule ^(.*)\.html$ index.php?q=$1-au.html [QSA,E=SITE_VERSION:au,L]
これらのテーマで多くのマイナーなバリエーションを試しましたが、書き換えをトリガーするものはありません。
編集: 私の理解に根本的なギャップがあることに気づきました。URL の書き換えにより、.htaccess を介して別のループがトリガーされるため、フラグメントではなくファイル全体を表示する必要があります。これにより、ソリューションが機能する理由が説明されますが、まだ環境変数を取得できません。
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
########## Set the cookie if the user selects a new country #############
# The webpage submits the existing URL plus the site-version URL parameter. #
# The below strips the parameter and returns to the same URL with a cookie site-version. #
# Unless the site-version is uk (default) in which case the cookie is deleted. #
RewriteCond %{QUERY_STRING} ^.*site-version=(au|us|za|eu)$
RewriteRule (.*) $1? [co=site-version:%1:example.com:1051200:/,R,E=SITE_VERSION:%1,L]
RewriteCond %{QUERY_STRING} ^.*site-version=uk$
RewriteRule (.*) $1? [co=site-version:uk:example.com:-1:/,R,E=SITE_VERSION:uk,L]
#####################
# If the cookie is present and the URL is either a-page.html or another-page.html append -au eg, a-page-au.html #
RewriteCond %{HTTP_COOKIE} site-version=au [NC]
RewriteRule ^(a-page|another-page)\.html$ index.php?q=$1-au.html [NC,QSA,E=SITE_VERSION:au,L]
##########################
# Normal Friendly URLs rewrite, ie, cookie not detected or it isn't one of the listed URLs #
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]