我有子域名: 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
所以,我必须在重定向之前检查两件事:
我创建了这个规则:
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。错误在哪里?第二串是错的?
答案 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]