Can mod-rewrite be used to set environmental variables?
- by VLostBoy
Hi, I've got an existing simple rewrite rule like so:
<Directory /path>
RewriteEngine on
RewriteBase /
# if the requested resource does not exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# route the uri to a front controller
RewriteRule ^(.*)$ index.php/$1 [L]
</Directory>
This works fine, but I want to do one of either two things. On the basis of detecting the
clients accept-language header, I want to either
(i) Set the detected language as an environmental variable that the script can use or
(ii)Rewrite the request so that the url begins with the language code (e.g. www.example.com/en/some/resource)
In terms of implementing (i), I defined this rule:
<Directory /path>
RewriteEngine on
RewriteBase /
# if the requested resource does not exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# if the users preferred language is supported...
RewriteCond %{HTTP:Accept-Language} ^.*(de|es|fr|it|ja|ru|en).*$ [NC]
# define an environmental variable PREFER_LANG
RewriteRule ^(.*)$ - [env=PREFER_LANG:%1]
# route the uri to a front controller
RewriteRule ^(.*)$ index.php/$1 [L]
</Directory>
I've tried a few variations, but PREFER_LANG is not defined in $_SERVER nor retrievable by getenv.
In terms of implementing (ii)... lets just say its messy. I'll post it if I can't get an answer to one.
Can anyone advise me? Thanks!