0

我有一个以多种语言运行的页面。该网页的英文版应通过 访问http://www.example.com/en

问题是,目前,我正在做这样的事情:http://www.example.com/lang=en因为使用它似乎有点“防弹”,$_GET而不是从可能的 url 中提取语言代码http://www.example.com/en/my-great-article/#main?query=var

这是正确的——更$_GET适合那种任务吗?

另一个问题是使用重写http://www.example.com/lang=en变成http://www.example.com/en.
目前我正在通过我的`.htaccess这样尝试:

RewriteEngine on
Redirect 301 /*?lang=en /en

那根本不起作用,为什么?
另请注意,该路径/en实际上并不存在于服务器上,所以我真的很困惑如何去做?

4

1 回答 1

0

不需要重定向,您只需要重写。如果您有http://www.example.com/my-great-article.php,它将解释 $_GET["lang"] 以在 .htaccess 中进行语言检测。

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/(.*)$ $2?lang=$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/?$ index.php?lang=$1 [QSA,L]

在第一组中:$2 是语言反向引用,$1 是脚本文件名捕获,例如 my-great-article.php。

在第二组中,$1 是语言缩写,如 en、fr、cn、it、es、jp、de、...

这组规则这样做:

http://www.example.com/en/my-great-article.php => /my-great-article.php?lang=en
http://www.example.com/en => /index.php?lang=en
http://www.example.com/en/ => /index.php?lang=en
于 2013-11-03T18:22:21.613 回答