嗨,我正在努力用 .htaccess 实现两件事,大概每个问题都相同。
我成功设置了一个名为orsite-version
的cookie 。au
us
如果设置了 cookie,我希望http://www.example.com和http://www.example.com/重定向(内部)到http://www.example.com/home-au.html(如果 cookie 站点版本=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]