在这种情况下,如何使用URL正确识别语言?如何为此设置重写规则?

时间:2013-11-03 15:29:44

标签: php apache .htaccess mod-rewrite rewrite

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

问题在于,目前我正在做这样的事情:http://www.example.com/lang=en因为使用$_GET而不是从网址中提取语言代码似乎更加“防弹”可能是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实际上并不存在于服务器上,所以我真的很困惑如何去做?

1 个答案:

答案 0 :(得分:0)

不需要重定向,您只需要重写。如果你有http://www.example.com/my-great-article.php,那就解释了.htaccess中用于语言检测的$ _GET [“lang”]。

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