带有GET参数和URL条件的.htaccess重定向

时间:2019-05-04 11:22:07

标签: regex apache mod-rewrite

我尝试根据2种情况重定向到另一个域并更改URL结构(不保留URI部分):

  1. 原始URL具有“ lang”参数。

  2. 原始URI以“页面”开头。

这是Apache 2.2

当原始URL中仅具有lang paramenter时,此方法有效:

RewriteCond %{QUERY_STRING} lang=en$
RewriteRule ^.*$ https://www.destination.com/en/? [R=301,L]

例如,它将ok重定向为:

http://www.origin.com/?lang=en

收件人:

http://www.destination.com/en/

但是我还需要重定向类似的内容:

http://www.origin.com/page/5/?lang=en

收件人:

http://www.destination.com/en/

我正在尝试类似的操作,但是没有用,我认为RewriteRule模式中存在错误:

RewriteCond %{QUERY_STRING} ^lang=en$
RewriteRule ^/page/.*/?$ https://www.destination.com/en/? [R=301,L]

1 个答案:

答案 0 :(得分:0)

欢迎!

您可能不希望在RewriteRule的末尾有一个?。但是,如果您愿意,可以这样做。也许您想要一个类似于以下内容的RewriteRule:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{QUERY_STRING} lang=en$
    RewriteRule (.*)(\?lang=en) https://www.destination.com/en/ [R=301,L]

</IfModule>
  • 您可能想使用类似以下命令来重新启动apache:

    sudo apachectl restart
    
  • 每次对.htaccess文件进行更改时,您可能会清除浏览器缓存

enter image description here

此图显示了您的表达式如何工作,如果您想知道:

enter image description here

This tool可以帮助您简单地设计自己想要的任何规则。

我假设您要将所有包含?lang=en的ULR重定向到单个URL。我不确定。如果不是这种情况,则可能无法使用我的表达方式。