我知道有很多这样的问题,但我仍然无法解决问题。
我正在使用以下.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]
我希望有人能够告诉我问题所在。
答案 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]