我想从类似这样的 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.xml
至http://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.xml
到http://www.example.de/this-de.xml
。但不会对 执行任何操作http://www.example.us/this.xml
,因为 ccTLD 与 中的其中一个不匹配条件模式。
$1
并$2
反向引用捕获的组RewriteRule
图案. 而%2
反向引用最后匹配的第二个捕获组RewriteCond
条件模式。
注意:您应该在配置中尽早规范化域名(即重定向到 www 或非 www),这样在上面的正则表达式中就不需要再进行www.
可选操作了(即)。(www\.)?