我有以下重写规则,以便控制我的不同国际域重定向到主域。
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的任何别名。
我能为此做点什么吗?
谢谢!
答案 0 :(得分:2)
模式匹配存在一些问题,但问题可能出在与国际顶级域名相匹配的行中。以下是每行的问题:
.
是通配符,因此您将在www.domain.com
上获得否定匹配,但wwwxxx.domain.com
与*
匹配,以匹配任何字符的0或更多。 %{HTTP_HOST}
永远不应为空。.
是任何字符的通配符,并且您不会将%{HTTP_HOST}
的末尾与$
完全匹配。使用a ?
使第一个模式不合适。您无需在co.in
上匹配,因为它将与in
匹配。[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
答案 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]