根据子域使用mod_rewrite附加参数

时间:2014-02-05 16:25:24

标签: .htaccess mod-rewrite subdomain

我使用mod_rewrite相当新,我一直在挖掘各种问题和文档文件而没有得到解决方案。

人们可以使用以下两个主机之一访问我的网站:

www.example.com
fr.example.com

子域表示用户的语言。 如果使用www,则应假定该语言为英语。

我要做的是检测子域并将其值作为参数传递给原始请求。

以下是我的尝试:

RewriteEngine On

# match the subdomain
RewriteCond %{HTTP_HOST} ^fr.example.com$ [NC]

# Make sure I don't already have a "lang" in the query string
RewriteCond %{QUERY_STRING} !lang= [NC]

RewriteRule (.*) $1?lang=fr [QSA] 

# match the subdomain
RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]

# Make sure I don't already have a "lang" in the query string
RewriteCond %{QUERY_STRING} !lang= [NC]

RewriteRule (.*) $1?lang=en [QSA] 

我正在通过以下方式测试:     http://fr.example.com/index.php?a=1 在index.php中,我正在转储请求参数的内容,但我一直得到:

array ( 'a' => '1', )

我期待看到:

array ( 'a' => '1', 'lang' => 'fr)

我正在使用http://htaccess.madewithlove.be/调试我的规则,但我无法解决此问题。

我做错了什么?

提前致谢。

2 个答案:

答案 0 :(得分:0)

首先不要使用http://htaccess.madewithlove.be/测试,因为这是非常可靠的。最好在本地主机上进行测试。

现在您的规则也需要更正。试试这段代码:

RewriteEngine On
RewriteBase /

# match the subdomain
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^fr\.example\.com$ [NC]
# Make sure I don't already have a "lang" in the query string
RewriteCond %{QUERY_STRING} !(^|&)lang= [NC]
RewriteRule ^(.*)$ $1?lang=fr [L,QSA] 

# match the subdomain
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
# Make sure I don't already have a "lang" in the query string
RewriteCond %{QUERY_STRING} !(^|&)lang= [NC]
RewriteRule ^(.*)$ $1?lang=en [L,QSA]

答案 1 :(得分:0)

如果您以后可以添加其他语言,则可以使其更具动态性。因此,如果它是www或非www,它将是en,如果是其他任何东西,它可以追加。这是你可以做到的另一种方式。

RewriteEngine On 

#match en domain
RewriteCond %{HTTP_HOST} ^(www.)?example\.com$ [NC]
RewriteCond %{QUERY_STRING} !(^|&)lang= [NC]
RewriteRule ^(.*)$ /$1?lang=en [QSA,L]

#match other languages (subdomains)
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$ [NC]
RewriteCond %{QUERY_STRING} !(^|&)lang= [NC]
RewriteRule ^(.*)$ /$1?lang=1% [QSA,L]