在网站重新设计的背景下,我想使用lang
将带有.htaccess
param的静态网址重定向到另一个域的静态网址。
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
.......
还有更RewriteCond
和RewriteRule
的更复杂的网址,均未成功...
答案 0 :(得分:0)
您需要使用mod_rewrite(RewriteCond
/ RewriteRule
)才能匹配网址的查询字符串部分。
由于源网址和目标网址的网址路径之间似乎没有任何相关性,并且每种语言的网址路径看起来都不相同,因此您需要在{{1}中单独执行每项操作。 }。
例如:
.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]
)是一个捕获组,允许对(fr)
形式进行反向引用以引用{{1}中的内容(例如%1
) } 替换。如果您不使用括号,则无法执行此操作。
替换末尾的fr
会从请求中删除查询字符串。
如果这些是永久重定向,请将RewriteRule
更改为?
,但只有在您确认它正常工作后才会更改。 (301s被浏览器严格缓存。)
更新:如果网址参数值与域名TLD不匹配,那么您只需要明确并命名即可。例如:
R