2017-05-09 95 views
1

在重新设计网站的情况下,我想使用.htaccess将静态网址与lang param重定向到另一个域上的静态网址。 网址都建这样的:将301个静态变量lang URL重定向到另一个域

www.example.com/first-page/?lang=it >> www.example.it/prima-pagina/ 
www.example.com/first-page/?lang=fr >> www.example.fr/premiere-page/ 

www.example.com/another-page/?lang=it >> www.example.it/unaltra-pagina/ 
www.example.com/another-page/?lang=fr >> www.example.fr/autre-page/ 

www.example.com/folder/last-page/?lang=it >> www.example.it/record/ultima-pagina/ 
www.example.com/folder/last-page/?lang=fr >> www.mydomain.fr/dossier/derniere-page/ 

我已经尝试过简单的重新定位像RedirectMatch 301 ....... 也比较配合物的网址RewriteCondRewriteRule,都没有成功...

回答

0

你会需要使用mod_rewrite(RewriteCond/RewriteRule)才能匹配URL的查询字符串部分。

由于源URL和目标URL的URL路径之间似乎没有任何关联,并且这些URL对于每种语言都不相同,因此您需要分别在.htaccess中执行每项操作。

例如:

www.example.com/first-page/?lang=it >> www.example.it/prima-pagina/ 
www.example.com/first-page/?lang=fr >> www.example.fr/premiere-page/ 

下仅涉及前两个重定向。

RewriteEngine On 

RewriteCond %{QUERY_STRING} ^lang=(it) 
RewriteRule ^first-page/$ http://www.example.%1/prima-pagina/? [R,L] 

RewriteCond %{QUERY_STRING} ^lang=(fr) 
RewriteRule ^first-page/$ http://www.example.%1/premiere-page/? [R,L] 

的parenthesised子模式(例如(fr))是捕获组并允许形式%1的反向引用在RewriteRule取代参考内容(例如fr)。如果你不使用括号,那么你不能这样做。

替代结束时的?从请求中删除查询字符串。

如果这些旨在成为永久性重定向,那么请将R更改为R=301,但只有在您确认工作正常后方可执行。 (301s被浏览器缓存)

更新:如果URL参数值与域TLD不匹配,那么您只需要明确并命名即可。例如:

RewriteCond %{QUERY_STRING} ^lang=aa 
RewriteRule ^first-page/$ http://www.example.bb/prima-pagina/? [R,L] 
+0

嗨。感谢您的回复。它接缝它不起作用。什么都没发生。我试着用或不用“子文件夹”,在langu参数周围加上“(”和“)”。我也尝试删除“%1”,并将其替换为域名分机。 - 另外:如果lang参数不等于域扩展名,我该怎么办? – Romain

+0

你的'.htaccess'文件中是否有其他指令?任何其他'.htaccess'文件?是mod_rewrite安装/启用? '.htaccess'文件是否允许?我已经更新了关于lang param和domain ext不同的答案 - 在这种情况下,你只需要指定两者(没有快捷键)。还添加了更多的信息来解释正则表达式(即'(',')'和'%1')。 – MrWhite

+0

Thans再次。是的,我的'.htaccess'文件中已经有指令,用于Worpress。我试图把你的重写规则放在''区域中,但没有成功。但似乎主页工作:'RewriteCond%{QUERY_STRING}^lang = en RewriteRule^http://www.domain .com /? [R = 301,L]'但不是内部页面。 – Romain

相关问题