htaccess根据条件replace部分url

我想从像http://www.example.de/this.xml这样的URLredirect

使用正确的语言,例如.xmlhttp://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$2RewriteRule 模式中的捕获组的反向引用。 而%2是最后匹配的RewriteCond CondPattern中第二个捕获组的反向引用。

注意:你应该在你的configuration文件早些时候规范域名(也就是redirect到www或者非www),以便制作www. 在上面的正则expression式(即。 (www\.)? )中是可选的。