开发者

global rule to be applied to all current rules

I currently have a pretty straight forward modrewrite file that maps urls to different php pages with possible GET variables:

RewriteRule ^grant$ about.php?p=4 [L]
RewriteRule ^contact-people-([A-za-z0-9-]+)$ about.php?p=5&to=$1 [L]
RewriteRule ^([a-z0-9-]+)-media$ media-gallery-element.php?prettyid=$1 [L]
#etc开发者_运维问答 .... it goes on for perhaps 200 or so entries

I want to have a global language variable that is in the url and I'm wondering how I can smartly adjust my modrewrite file to handle this. I could do it by doubling my entries and just add more rules such that the first one above gets changed to:

RewriteRule ^grant$ about.php?p=4&lan=en [L]
RewriteRule ^([a-z]+)/grant$ about.php?p=4&lan=$1 [L]

The first row is just the same and would default to english (en) and then the second row handles other language codes, es, fr, de, etc. So I could do it this way, but it seems like there is a better way to do this without doubling my entries. Basically, I want to take ALL of my requests, look for a ([a-z]+)/ at the beginning of the request uri, and then tack that onto the request as a GET variable, lan.

How do I do this smartly?


You can do this easily by setting an environmental variable. Something like this should do the trick:

# set default environmental variable for language
RewriteRule .* - [E=language:en]

# if two characters and slash lead, then
RewriteCond %{REQUEST_URI} ^/([a-z]{2})/(.*)$     

# overwrite default environmental variable
RewriteRule .* - [E=language:%1] 

# other rules
RewriteRule ^grant$ about.php?p=4&lan=%{ENV:language} [L]

You can also access the environmental variable directly in PHP, in which case you could skip including it in the rewrite rules:

echo getenv('language');
echo $_SERVER['language'];
echo $_SERVER['REDIRECT_language'];
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜