缩小目前过于宽泛的apache重定向语句

时间:2017-01-05 21:37:51

标签: apache .htaccess redirect mod-rewrite

我目前有这两个重定向语句 -

RedirectMatch permanent "/(.*)\.html$" "https://www.example.com/archive/blog/$1"
RedirectMatch permanent "/(.*)" "https://www.example.com/archive/blog"

RedirectMatch permanent "/(.*)\.html$" "https://www.example.com/es/archivo/blog/$1"
RedirectMatch permanent "/(.*)" "https://www.example.com/es/archivo/blog"

我想要发生的事情是,当某人在西班牙语页面上时,他们将被重定向到西班牙语www.example.com页面。这是希望对应于第二组规则。

现在发生的事情是西班牙语和英语网址都在第一个重定向规则上匹配,因为它们都有.html结尾,所以它总是会重定向到第一个规则。

如何设置这两个重定向语句,以便获取URL中的差异?

作为示例 - 使用这些规则,转到 - http://www.oldsite.com/2016/11/article.html会将我重定向到第一条规则,这是正确的。

如果我将其设为网址 - http://www.oldsite-es.com/2016/11/article.html,它会将我重定向到第一条规则,这是不正确的,因为它是es(西班牙语)网页。

编辑 -

这是我尝试过的一个新的重定向语句,它不起作用 -

<If "%{HTTP_HOST} = '^oldsite-es\.com$'">
   RedirectMatch permanent "/(.*)\.html$" "https://www.example.com/es/archivo/blog/$1"
   RedirectMatch permanent "/(.*)" "https://www.example.com/es/archivo/blog"
</If>

如何修改重定向规则以使用这两个URL主机?

1 个答案:

答案 0 :(得分:1)

因此,根据您的评论,您需要使用mod_rewrite而不是Mod_alias,以便您可以根据主机名进行匹配,并通过匹配创建一个规则。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(?:www\.)?oldsite(-es)?\.com [NC]
RewriteRule ^ http://www.example%1.com%{REQUEST_URI} [R=301,L]