将带参数的 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)
.
我一直在尝试搜索,但还没有成功。找到了有关重定向的不同选项,但与我正在寻找的完全不同。
因此目前网站 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)
.