.htaccess页面和lang错误

时间:2011-12-23 19:25:59

标签: apache .htaccess mod-rewrite

我试着看看stackoverflow,但我找不到答案。

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

  

例如: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...

但由于某些原因,当我回显get for page时,值为:index.php,所以我无法读取页面。

1 个答案:

答案 0 :(得分: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加载为页面。