更改语言URL格式后的HtAccess重定向

时间:2019-09-20 作者:Roman

更改URL语言格式后

http://my-site.com/name-of-page/?lang=en
http://my-site.com/name-of-page/?lang=ru

http://my-site.com/en/name-of-page/
http://my-site.com/ru/name-of-page/
我想将以前的URL版本重定向到实际版本。

我在网上找到了这个代码片段,显然它部分解决了我的问题。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{QUERY_STRING} lang=en
# exclude all requests starting with /wp-admin/
RewriteCond %{REQUEST_URI} !^/wp-admin/.*$
RewriteRule ^(.*) /en/$1? [L,R=301]
</IfModule>
但是,它是为lang=en 只有

我如何也包括lang=ru 这样它就可以重定向lang=enlang=ru?

提前感谢您的宝贵提示!

1 个回复
最合适的回答,由SO网友:MrWhite 整理而成

为了抓住lang=enlang=ru 您可以这样更改这些指令:

RewriteCond %{QUERY_STRING} lang=(en|ru)
# exclude all requests starting with /wp-admin/
RewriteCond %{REQUEST_URI} !^/wp-admin/
RewriteRule (.*) /%1/$1? [L,R=302]
The(en|ru) 部件匹配enru 周围的括号使其成为一个捕获组,可以稍后引用。

这个%1 (注意%, 不$) 在RewriteRule 替换是对上述捕获组的反向引用。所以%1 保留其中一个enru.

尾部.*$ 于年底!^/wp-admin/.*$ 是多余的。正如^ 上的前缀RewriteRule 图案(.*) - 因为默认情况下regex是贪婪的。

首先使用302(临时)重定向进行测试,只有在确定其正常工作时才更改为301(永久),以避免缓存问题。