我有一个以多种语言运行的页面。应通过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
实际上并不存在于服务器上,所以我真的很困惑如何去做?
答案 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