0

我试图为多语言网站编写规则。例如,www.hostname.com/fr 和 www.hostname.com/de 都可以,但尝试任何其他语言标签应该重定向到 www.hostname.com/en。www.hostname.com/it 重定向到 www.hostname.com/en,www.hostname.com/es 重定向到 www.hostname.com/en 等等...

我成功地以“积极”的方式制定了一些规则,但每次我添加一个!创建一个否定规则,它不起作用。

例如 :

RewriteCond %{HTTP_HOST} ^www.hostname.com$
RewriteCond %{REQUEST_URI} ^/?([a-z]{2})/?$
RewriteCond %{REQUEST_URI} ^/?(fr|de)/?$
RewriteRule (.*) http://www.hostname.com/en [L,R=301]

此代码将所有内容重定向到 hostname.com/en。我只想要与 fr et de 重定向到 en 不同的标签。所以我尝试了:

RewriteCond %{HTTP_HOST} ^www.hostname.com$
RewriteCond %{REQUEST_URI} ^/?([a-z]{2})/?$
RewriteCond %{REQUEST_URI} !^/?(fr|de)/?$
RewriteRule (.*) http://www.hostname.com/en [L,R=301]

刚加了一个!。但它不起作用,URL 永远不会被重定向。我可能在编写规则时遗漏了一些东西......

4

1 回答 1

1

您可以将其拆分为两个规则。第一条规则处理fr,deen。它不会重写任何东西并将请求原封不动地传递给 Apache。如果这不匹配,则第二条规则处理其他所有内容

RewriteCond %{REQUEST_URI} ^/(?:fr|de|en)
RewriteRule ^ - [L]

RewriteRule ^[a-z]{2}/(.*)$ /en/$1 [R,L]

永远不要在启用的情况下进行测试,有关详细信息301,请参阅此答案提示调试 .htaccess 重写规则

于 2013-04-08T18:04:26.007 回答