2011-12-23 56 views
17

我试图在stackoverflow看,但我找不到我的答案。.htaccess页面和lang错误

所以我需要找出哪个域是哪个子域的用户,哪个页面正在加载。

如:en.domain.com/contactus

这应该加载英语与我们联系页面。

我有什么是:

RewriteCond %{HTTP_HOST} ^(www\.)?domain.com$ [NC] 
RewriteRule ^(.*)$ index.php?lang=en&page=$1 [L,NC] 

RewriteCond %{HTTP_HOST} ^en.domain.com$ [NC] 
RewriteRule ^(.*)$ index.php?lang=en&page=$1 [L,NC] 
RewriteCond %{HTTP_HOST} ^fr.domain.com$ [NC] 
RewriteRule ^(.*)$ index.php?lang=fr&page=$1 [L,NC] 
#etc... 

,但由于某种原因,当我呼应获取页面,该值是:index.php文件,所以我不能阅读网页。

回答

18

下面是你应该使用什么:

RewriteEngine On 
RewriteBase/

SetEnvIf Host ^www\. lang=en 
SetEnvIf Host ^en\. lang=en 
SetEnvIf Host ^fr\. lang=fr 

RewriteCond %{REQUEST_URI} !\.(css|png|gif|jpe?g|js)$ [NC] 
RewriteRule ^([a-z0-9_\-]+)/?$ index.php?lang=%{ENV:lang}&page=$1 [L,NC,QSA] 

%{ENV:lang}将从SetEnvIf读取(从子域),并设置正确的语言,你会从$_GET['lang'];获得(在你的PHP代码 - 假设它是PHP)

这样,任何子域都将被动态加载,而不会为子域重复创建规则。我还添加了一个防止加载图像或JavaScript作为页面的规则。

+0

非常感谢你,我改变了一些东西,但这项工作很完美。 – goblar 2011-12-23 19:44:33

+0

欢迎,很高兴我能帮忙,谢谢 – 2011-12-23 19:46:07

+4

+1使用setenvif – Tech4Wilco 2011-12-24 14:12:00