.htaccess语言子域会影响其他规则

时间:2012-09-20 18:03:36

标签: .htaccess mod-rewrite subdomain

我知道有很多这样的问题,但我仍然无法解决问题。

我正在使用以下.htaccess代码来更改语言:

RewriteCond %{HTTP_HOST} ^(en|us)\.domain\.com$
# Create an environment variable to remember the language:
RewriteRule (.*) - [QSA,E=LANGUAGE:%1]
# Now check if the LANGUAGE is empty (= doesn't exist)
RewriteCond %{ENV:LANGUAGE} ^$
# If so, create the default language (=en):
RewriteRule (.*) - [QSA,E=LANGUAGE:en]
# WHATEVER THE LANGUAGE ADD IT TO THE URI:
RewriteRule (.*) $1?language=%{ENV:LANGUAGE} [QSA]

这会在地址末尾添加?language=variable

但由于某种原因,其他规则会产生内部服务器错误:

RewriteRule ^([0-9]+)/([^/]+)(|/)$ code.php?id=$1&title=$2 [L]

简单的规则(不添加变量)类似于这个工作正常:

RewriteRule ^stats(|/)$ stats.php [L]

我希望有人能够告诉我问题所在。

1 个答案:

答案 0 :(得分:1)

您需要包含QSA或您的语言参数丢失:

RewriteRule ^([0-9]+)/([^/]+)(|/)$ code.php?id=$1&title=$2 [L,QSA]

该规则没有任何问题,500错误可能由code.php

引起

看起来你所拥有的语言规则就是循环,除了将QSA添加到添加到查询字符串的其他规则之外,当你已经拥有它时,你需要排除附加“language =” 。因此,在最后一个语言规则之上,添加以下内容:

RewriteCond %{QUERY_STRING} !language

这样看起来像:

RewriteCond %{QUERY_STRING} !language
# WHATEVER THE LANGUAGE ADD IT TO THE URI:
RewriteRule (.*) $1?language=%{ENV:LANGUAGE} [QSA]