将带参数的 URL 重定向到顶级域

Redirecting URL with paramter to top-level domain

我一直在尝试搜索,但还没有成功。找到了有关重定向的不同选项,但与我正在寻找的完全不同。

因此目前网站 URL 包含 lang 参数,例如 ?lang=en?lang=ru?lang=fi。参数在 URL.

的最后

想法是将语言移至顶级域。所以基本上我正在寻找一种方法将包含参数 ?lang=ru 的所有 URL 重定向到顶级 .ru 域。与其他语言相同。

我可以通过 .htaccess 完成吗?还是根本不应该这样做?将网站移动到不同的域应该需要重定向以将 link 果汁和权限传递给新域。

希望有人能引导我找到正确的方法。

非常感谢!

您应该可以通过 .hataccess 执行此操作。您可以在 .htaccess

中使用下面的代码
RewriteEngine on

RewriteCond %{REQUEST_URI} lang=en
RewriteRule ^ https//wwww.yourwebsite.ext [L,R]

我认为如果你为所有其他人写同样的东西应该可以正常工作。一定要试一试,然后告诉我。

如果没有其他 URL 参数需要保留,那么您可以使用 .htaccess 文件顶部附近的 mod_rewrite 来执行此操作:

RewriteEngine On

# Redirect "/foo?lang=xx" to "example.xx/foo"
RewriteCond %{QUERY_STRING} ^lang=([a-z]{2})$
RewriteRule ^ https://example.%1%{REQUEST_URI} [QSD,R=302,L]

以上匹配 任何 由 2 个小写字母组成的语言代码。要匹配特定语言代码,请在正则表达式中使用 alternation 并将 RewriteCond 指令更改为:

RewriteCond %{QUERY_STRING} ^lang=(en|ru|fi|abc|etc)$

QSD 标志从重定向响应 (Apache 2.4) 中丢弃原始 lang=xx 查询字符串。否则这将被默认复制到目标 URL。

%1 反向引用包含在前面的 条件 中捕获的 lang URL 参数的值。 REQUEST_URI 服务器变量包含来自请求的完整 URL 路径(无查询字符串)。

这确实假设特定语言的 TLD 域托管在别处。换句话说,我们不需要检查我们是否已经在所需的 TLD 域中。

使用 302(临时)重定向进行测试,并且仅更改为 301(永久)重定向 - 如果这是意图 - 一旦您确认这可以正常工作。


更新: 任何特定的重定向,例如。 lang=en.com 需要先出现。例如:

# Redirect languages to .com
RewriteCond %{QUERY_STRING} ^lang=(en)$
RewriteRule ^ https://example.com%{REQUEST_URI} [QSD,R=302,L]

# All other language codes...
# Redirect "/foo?lang=xx" to "example.xx/foo"
RewriteCond %{QUERY_STRING} ^lang=([a-z]{2})$
RewriteRule ^ https://example.%1%{REQUEST_URI} [QSD,R=302,L]

使用alternation(如上所述)如果语言代码较多。例如。 (en|gb).