我想从像http://www.example.de/this.xml这样的URLredirect
使用正确的语言,例如.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]
你需要专门检查ccTLD吗? 它看起来像你只是将主机复制到目标urlpath?
尝试如下所示:
RewriteRule ^(this)(\.xml)$ /$1-%{HTTP_HOST}$2 [R=301,L]
这将永久性地将http://www.example.de/this.xml的请求redirect到http://www.example.de/this-www.example.de.xml 。
请注意,如果您以前使用301s进行过testing,则需要确保已清除任何中间caching,因为任何较早的错误 301都将被caching。 (使用302s进行testing有时可能有利于这个原因。)
但是,您将如何专门检查ccTLD?
为了只允许selectless数ccTLD,并从主机上捕获TLD,则需要使用RewriteCond指令,并检查HTTP_HOST服务器variables,类似于所做的操作。 但是,您的RewriteRule replace是错误的。
例如,您可以执行如下操作:
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.xmlredirect到http://www.example.de/this-de.xml 。 但是不要对http://www.example.us/this.xml做任何事情,因为ccTLD与CondPattern中的一个不匹配。
$1和$2是RewriteRule 模式中的捕获组的反向引用。 而%2是最后匹配的RewriteCond CondPattern中第二个捕获组的反向引用。
注意:你应该在你的configuration文件早些时候规范域名(也就是redirect到www或者非www),以便制作www. 在上面的正则expression式(即。 (www\.)? )中是可选的。