1

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

我正在使用以下 .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]

我希望有人能够告诉我问题出在哪里。

4

1 回答 1

1

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

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

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


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

RewriteCond %{QUERY_STRING} !language

所以它看起来像:

RewriteCond %{QUERY_STRING} !language
# WHATEVER THE LANGUAGE ADD IT TO THE URI:
RewriteRule (.*) $1?language=%{ENV:LANGUAGE} [QSA]
于 2012-09-20T18:08:25.457 回答