2011-08-19 81 views
2

我現在有一個非常簡單的modrewrite文件,該文件將URL映射到不同的PHP頁面有可能GET變量:全球規則適用於所有現有規則

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 

我想有一個全球性的語言變量,它是在網址中,我想知道如何巧妙地調整我的modrewrite文件來處理這個。我可以通過加倍我的項目做到這一點,只需添加更多的規則,使得第一個上面被更改爲:

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

第一行是一樣的,並會默認爲英語(en),然後在第二行處理其他語言代碼,es,fr,de等。所以我可以這樣做,但似乎有更好的方法來做到這一點,而不會使我的條目翻倍。基本上,我想要接受我的所有請求,在請求uri的開頭尋找([a-z] +)/,然後將它作爲GET變量lan。

我該如何巧妙地做到這一點?

+0

你有一個有限語言列表? –

+0

嗯,我在Apache中使用mod-rewrite,而php是我選擇的語言 – Landon

+0

不是編程語言:人類語言。像「lan = xx」,其中xx是語言。 –

回答

2

您可以通過設置環境變量輕鬆完成此操作。這樣的事情應該做的伎倆:

# 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] 

您也可以直接訪問環境變量在PHP中,在這種情況下,你可以跳過它包括在重寫規則:

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