通过 htaccess 将别名 TLD 重定向到 lang param URL

Redirect alias TLD to lang param URL via htaccess

我设法找到了解决方案但失败了,none 的其他人在此时工作。

我有兴趣将 example.fiexample.ru 等 TLD 重定向到具有语言参数的域。例如 URL 应该变成这样: 别名 example.fi 应重定向至 example.fi/?lang=fi,即芬兰语主页。

我尝试了不同的选项,但 none 行得通。

我感谢任何花时间回复的人。

假设:

  • 您想重定向任何 URL 路径,而不仅仅是主页(即根目录 URL)。 (首页只见下方*1.)
  • 初始请求中不需要其他 URL 参数。
  • 如果存在冲突 lang URL 参数,例如。 example.fi/?lang=de 然后 lang URL 参数被替换。例如。重定向到 example.fi/?lang=fi
  • 所有域的格式都是 example.<TLD>(或 www.example.<TLD>)。 IE。没有像 example.co.uk.
  • 这样的二级 TLD 的域

在根 .htaccess 文件的顶部附近尝试以下操作:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?example\.([^.]+)
RewriteCond %{QUERY_STRING}@@%1 !^lang=([^.]+)@@$
RewriteRule (.*) /?lang=%1 [R=302,L]

以上重定向如下:

  • example.fi/example.fi/?lang=fi
  • example.fi/fooexample.fi/foo?lang=fi
  • example.fi/foo?lang=deexample.fi/foo?lang=fi
  • example.fi/foo?lang=fi&bar=1example.fi/foo?lang=fi

%1 反向引用包含请求的 主机名 的 TLD。第二个条件使用它来检查适当的 ?lang=<TLD> 查询字符串是否已存在于查询字符串中。 (这是使用 CondPattern 中的内部反向引用 </code> 实现的。)如果不是,则重定向发生到相同的 URL-路径,但 <code>?lang=<TLD> 查询字符串,覆盖之前可能在请求中的任何查询字符串。

目前这是一个 302(临时)重定向。如果这是永久性的,那么只有在您确认它按预期工作后才更改为 301(永久)重定向。

*1 仅限首页

如果您特别只想将 lang URL 参数附加到“主页”,即。根 URL 然后将 RewriteRule 指令更改为:

:
RewriteRule ^$ /?lang=%1 [R=302,L]