RewriteCond导致别名重定向到.in域

时间:2013-07-10 17:26:56

标签: regex apache .htaccess mod-rewrite

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

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的任何别名。

我能为此做点什么吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

模式匹配存在一些问题,但问题可能出在与国际顶级域名相匹配的行中。以下是每行的问题:

  1. .是通配符,因此您将在www.domain.com上获得否定匹配,但wwwxxx.domain.com*匹配,以匹配任何字符的0或更多。
  2. %{HTTP_HOST}永远不应为空。
  3. .是任何字符的通配符,并且您不会将%{HTTP_HOST}的末尾与$完全匹配。使用a ?使第一个模式不合适。您无需在co.in上匹配,因为它将与in匹配。
  4. 猜测您示例中的[percent]确实是%,这应该是它。
  5. 尝试以下代替现有的内容:

    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
    

答案 1 :(得分: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]