htaccess 根据条件替换部分 url

htaccess 根据条件替换部分 url

我想从类似这样的 URL 重定向http://www.example.de/this.xml

使用.xml正确的语言,例如。http://www.example.de/this-www.example.de.xml

与其他所有语言相同,即 (de|com|eu ...)

现在我已经得到了这个,但我不知道如何在中设置正确的语言RewriteRule

RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.(de|at|ch|com|nl|be|fr)$
RewriteCond %{REQUEST_URI} ^/this.xml$
RewriteRule ^(.*)$ /this-www.mydomain.$1(de|at|ch|com|nl|be|fr)$2.xml [R=301,L]

答案1

您是否需要专门检查 ccTLD?看起来您只是复制了主持人进入目标 URL 路径?

尝试如下操作:

RewriteRule ^(this)(\.xml)$ /$1-%{HTTP_HOST}$2 [R=301,L]

这会将 的请求永久重定向http://www.example.de/this.xmlhttp://www.example.de/this-www.example.de.xml

请注意,如果你之前已经使用 301 进行测试,则需要确保清除所有中间缓存,因为之前的任何错误301 将被缓存。(因此,使用 302 进行测试有时会很有帮助。)


但是您如何专门检查 ccTLD 呢?

仅允许少数几个 ccTLD,并从主持人那么您需要使用RewriteCond指令并检查HTTP_HOST服务器变量,类似于您所做的。但是,您的RewriteRule 代换是错的。

例如,你可以这样做:

RewriteCond %{HTTP_HOST} ^(www\.)?example\.(de|at|ch|com|nl|be|fr)$
RewriteRule ^(this)(\.xml)$ /$1-%2$2 [R=301,L]

这将重定向http://www.example.de/this.xmlhttp://www.example.de/this-de.xml。但不会对 执行任何操作http://www.example.us/this.xml,因为 ccTLD 与 中的其中一个不匹配条件模式

$1$2反向引用捕获的组RewriteRule 图案. 而%2反向引用最后匹配的第二个捕获组RewriteCond 条件模式

注意:您应该在配置中尽早规范化域名(即重定向到 www 或非 www),这样在上面的正则表达式中就不需要再进行www.可选操作了(即)。(www\.)?

相关内容