我有一个.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
有人有什么想法吗?
答案 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中的反向引用。