使用/?lang = de

时间:2016-11-20 12:07:55

标签: php .htaccess redirect url-redirection http-status-code-301

我需要将多语言网站重定向到新域名,并使用.htaccess文件。我将所有旧页面重定向到新域上各自的新页面。

旧网址

Englisch
    Main page: www.olddomain.com
    Sub pages: www.olddomain.com/bike-rental

Spanish
    Main: www.olddomain.com/?lang=es
    Sub pages: www.olddomain.com/bike-rental?lang=es

German
    Main: www.olddomain.com/?lang=de
    Sub pages: www.olddomain.com/bike-rental?lang=de

新网址

Englisch
    Main page: www.new-domain.com
    Sub pages: www.new-domain.com/bike-rental

Spanish
    Main: www.new-domain.com/es
    Sub pages: www.new-domain.com/es/alquiler-de-bicis
German
    Main: www.new-domain.com/de
    Sub pages: www.new-domain.com/de/fahrradvermietung

我意识到它不适用于.htaac​​ces文件中的正常重定向     如:

    Redirect 301 /?lang=de http://www.new-domain.com/de/
    Redirect 301 /bike-rental?lang=de http://www.new-domain.com/de/fahrradvermietung

如何将这些旧网址重定向到新网址?

由于

4 个答案:

答案 0 :(得分:0)

自从php 5.3.0添加了这个变量:

$locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
echo $locale; // returns "en_US"
$localeshort = substr($locale, -2);
echo $localeshort; // returns "US"

如果您使用此功能,则可以使用以下内容进行重定向:

Header("Location: index.php?lang=".$localeshort);

答案 1 :(得分:0)

或者使用:this tool创建重定向,重复此操作直到您拥有所有语言。 IMAGE

答案 2 :(得分:0)

请参阅我之前的消息: 自从php添加了这个功能:

$locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
echo $locale; // returns "en_US"
$localeshort = substr($locale, -2);
echo $localeshort; // returns "US"

在.htacces中使用

RewriteEngine on

RewriteRule ^(.*)$ /index.php [R=permanent,L]

现在它将被重定向到开头的页面。 这是我所知道的唯一解决方案。

答案 3 :(得分:0)

您可以在htaccess中执行以下操作:

RewriteCond %{REQUEST_URI} !^/bike-rental$
RewriteCond %{QUERY_STRING} ^lang=(.*)$ 
RewriteRule ^(.*)/ /bike-rental?lang=%1 [L,R=301]

(测试并添加条件以避免循环重写)