.htaccess从子域重定向而不传递子域部分

时间:2010-06-02 11:38:24

标签: apache http .htaccess redirect https

我有一个.htaccess文件,它捕获所有子域名(我使用的是通配符DNS记录)并将它们重定向到安全登录页面,但前提是子域名不是www。我的代码是:

# Turn rewriting on
RewriteEngine On

# If no subdomain is supplied then add www by default
RewriteCond %{HTTP_HOST} ^mydomain\.com [NC]
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [L,R=301]

# If the subdomain isn't www then redirect to the login page
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://secure.mydomain.com/a/%1 [R=301,L]

这部分有效。捕获www并插入如果它不存在很好,但它没有做的是如果我键入:

http://sample.mydomain.com

我想:

https://secure.mydomain.com/a/sample

但子域位未附加到末尾。我认为%1位会这样做,但它似乎无法正常工作。

另外,作为第二个想法,我怎么能抓住:

https://secure.mydomain.com

在.com之后没有任何内容,并将其重定向回:

http://www.mydomain.com

有人有什么想法吗?

1 个答案:

答案 0 :(得分:1)

做类似的事情:

# If the subdomain isn't www then redirect to the login page
RewriteCond "%{HTTP_HOST}" !^www.* [NC]
RewriteCond "%{HTTP_HOST}" ^([^\.]+).*$
RewriteRule ^(.*)$ https://secure.mydomain.com/a/%1 [R=301,L]

通常,您必须捕获子域部分并对其进行反向引用。所以我添加了第二个RewriteCond。在RewriteRules中使用'%n'模式访问RewriteConds中的反向引用。