.htaccess从子域名的文章重定向到主域名

时间:2011-04-12 19:48:38

标签: .htaccess mod-rewrite redirect url-rewriting subdomain

我有子域名: sub1.tld.com sub2.tld.com 等等。此子域包含重要信息。但我想阻止打开任何其他网址,例如: sub1.tld.com/anypage sub2.tld.com/dir/more/anyurl.html 。必须将此网址重定向到主域tld.com: tld.com/anypage tld.com/dir/more/anyurl.html

所以,我必须在重定向之前检查两件事:

  1. 它是任何子域
  2. 它不是子域名的根页
  3. 我创建了这个规则:

    RewriteCond %{HTTP_HOST}    ^.+\.tld\.com [NC]
    RewriteCond %{REQUEST_URI}  !^/$
    RewriteRule ^(.*)       http://tld.com/$1 [R=301,L]
    

    这组规则按预期工作(将 sub1.tld.com/anypage 重定向到 tld.com/anypage ),但也重定向 sub1.tld。 com 到tld.com。错误在哪里?第二串是错的?

2 个答案:

答案 0 :(得分:2)

试试这个:

RewriteCond %{HTTP_HOST}    ^.+\.tld\.com$ [NC]
RewriteRule ^/(.+)$         http://tld.com/$1 [R=301,L]

或者您可以使用此字符串检查它是否为root:

RewriteCond %{THE_REQUEST} !^[A-Z]{3,9}\ /\ HTTP/

答案 1 :(得分:2)

由于某些未知原因,检查变量最可靠的是%{THE_REQUEST},而不是%{REQUEST_URI}。

%{THE_REQUEST}包含原始浏览器对网络服务器的查询:例如, GET /anypage.html HTTP / 1.1 ,如果您要打开网址http://anysite.com/anypage.html

所以,这里是.htaccess的完整工作规则集:

RewriteCond %{HTTP_HOST}    ^.+\.tld\.com$
RewriteCond %{THE_REQUEST}  ^get\ /(.+)\ http.* [NC]
RewriteRule ^(.+)           http://tld.com/$1 [R=301,L]