0

我有以下重写规则,以控制我的不同国际域重定向到主域。

RewriteCond %{HTTP_HOST} !^www..*
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} ^([^.]*).(ru|co.in|in|de|com.br|co.uk|ca|com|com/)
RewriteRule ^.*$ http://www.[percent]1.[percent]2[percent]{REQUEST_URI} [R=301,L]

这在过去几年里一直有效。

今天,当我尝试创建包含上述字母之一的域别名时,例如:tvonline.domain.com,它会重定向到 tvon.in。基本上发生在任何包含字母 in、ru、de、ca 的别名上。

对此我能做些什么吗?

谢谢!

4

2 回答 2

2

模式匹配存在几个问题,但问题可能出在与您的国际 TLD 匹配的行中。这是每一行的问题:

  1. The.是一个通配符,所以你会得到一个否定匹配,www.domain.com但也wwwxxx.domain.com可以*匹配 0 个或多个任何字符。
  2. %{HTTP_HOST}永远不应该是空的。
  3. The.是任何字符的通配符,并且您并不完全匹配 w​​ith 的%{HTTP_HOST}结尾$。使用 a?使第一个模式变得不贪婪。您不需要匹配 onco.in因为它将匹配in.
  4. 你的例子中的 the[percent]是真的%,这应该是。

尝试以下方法代替您现在拥有的:

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^(.*?)\.(ru|in|de|com\.br|co\.uk|ca|com|com)$
RewriteRule ^.*$ http://www.%1.%2%{REQUEST_URI} [R=301,L]

使用http://htaccess.madewithlove.be/进行测试:

改写:

Input URL: http://tvonline.domain.com/test.html

1. RewriteCond %{HTTP_HOST} !^www\. 
     This condition was met
2. RewriteCond %{HTTP_HOST} ^(.*?)\.(ru|in|de|com\.br|co\.uk|ca|com|com)$   
     This condition was met
3. RewriteRule ^.*$ http://www.%1.%2%{REQUEST_URI} [R=301,L]    
     This rule was met, the new url is http://www.tvonline.domain.com/test.html
     The tests are stopped, using a different host will cause a redirect

Output URL: http://www.tvonline.domain.com/test.html

无重写:

Input URL: http://www.tvonline.domain.com/test.html

1. RewriteCond %{HTTP_HOST} !^www\. 
     This condition was not met
2. RewriteCond %{HTTP_HOST} ^(.*?)\.(ru|in|de|com\.br|co\.uk|ca|com|com)$   
     This condition was met
3. RewriteRule ^.*$ http://www.%1.%2%{REQUEST_URI} [R=301,L]    
     This rule was not met because one of the conditions was not met
于 2013-07-10T19:22:22.343 回答
0

谢谢!这使我朝着正确的方向前进,以解决这个问题。这是我用来让它工作的。

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^.]*?).(ru|in|de|com\.br|co\.uk|ca|com|com)$
RewriteRule ^.*$ http://www.%1.%2%{REQUEST_URI} [R=301,L]
于 2013-07-11T09:28:35.060 回答