HTAccess“Mirror Domain”,尊重SSL,尊重co.uk + .com,保留子域名和request_uri

时间:2014-04-14 14:02:35

标签: regex apache .htaccess redirect

我想将多个域映射到主域,以实现搜索引擎优化和简单性。

我的三个域名

webdevguru.co.uk
t3chguy.co.uk
mortie.org

我希望两个示例域都被重定向到主域,保留它们的子域以及客户端访问的文件和查询字符串。

例如:

str.webdevguru.co.uk => str.webdevguru.co.uk/
webdevguru.co.uk     => www.webdevguru.co.uk/
fusion.t3chguy.co.uk => fusion.webdevguru.co.uk/
mortie.org/foo?bar   => www.webdevguru.co.uk/foo?bar
https://mortie.org/  => https://www.webdevguru.co.uk/

基本上,我希望所有流量都重定向到主域,这也必须尊重HTTPS,因为域cms被转移到不同的URL,我的包含cms子目录文件的子文件夹在.htaccess中具有以下代码。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^cms\.webdevguru\.co\.uk$ [NC]
RewriteRule .* https://secure24447.qnop.net/~t3chguy/tools/cms%{REQUEST_URI} [R=301,L]

这第二个代码完全正常我只是为了进一步解释我的例子而展示它。我一直在尝试任何正在使用的正则表达式的问题,它以一种方式工作但不能在另一种方式工作,有人可以建议我能做些什么来获得上述功能吗?

先谢谢

2 个答案:

答案 0 :(得分:0)

好的,我试一试:

# simple rule to redirect mainexample.co.uk to www.mainexample.co.uk
RewriteCond %{HTTPS} !=on [NC]
RewriteCond %{HTTP_HOST} ^[^\.]+\.(com|co\.uk|org)$ [NC]
RewriteRule ^(.*)$ http://www.mainexample.co.uk/$1 [R=301,QSA,L]

# same, with HTTPS
RewriteCond %{HTTPS} =on [NC]
RewriteCond %{HTTP_HOST} ^[^\.]+\.(com|co\.uk|org)$ [NC]
RewriteRule ^(.*)$ https://www.mainexample.co.uk/$1 [R=301,QSA,L]

# here comes the funny part
RewriteCond %{HTTPS} !=on [NC] # no HTPPS
RewriteCond %{HTTP_HOST} ^(.+)\.(.+)\.(com|co\.uk|org) [NC] # capture the subdomain
RewriteCond %{HTTP_HOST} !mainexample\.co\.uk$ [NC] # we are not on mainexample.co.uk
RewriteRule ^(.*)$ http://%1.mainexample.co.uk/$1 [R=301,QSA,L] # 301 redirection to mainexample keeping the subdomain and the request uri

# same, for HTTPS
RewriteCond %{HTTPS} =on [NC]
RewriteCond %{HTTP_HOST} ^(.+)\.(.+)\.(com|co\.uk|org) [NC]
RewriteCond %{HTTP_HOST} !mainexample\.co\.uk$ [NC]
RewriteRule ^(.*)$ https://%1.mainexample.co.uk/$1 [R=301,QSA,L]

不需要重复http和https的规则,但我不知道如何做一个唯一的规则。


关于您的HTTPS问题的修改:

RewriteCond %{HTTPS} =on [NC]
RewriteCond %{HTTP_HOST} ^(cms|fusion)\.[^\.]+\.(com|co\.uk|org)$ [NC]
RewriteRule ^(.*)$ https://secure27.qnop.net/~t3chguy/%1/$1 [R=301,QSA,L]

答案 1 :(得分:0)

您可以使用以下规则:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^cms\.mainexample\.co\.uk$ [NC]
RewriteRule .* https://secure24447.qnop.net/~t3chguy/tools/cms%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^[^.]+\.webdevguru\. [NC]
RewriteRule ^ - [L]

RewriteCond %{HTTP_HOST} ^webdevguru\. [NC,OR]
RewriteCond %{HTTP_HOST} ^(?:www\.)?mortie\.org$ [NC]
RewriteRule ^ http%{ENV:protossl}://www.webdevguru.co.uk%{REQUEST_URI} [R=301,L,NE]

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\.[^.]+\.[^.]+\. [NC]
RewriteRule ^ http%{ENV:protossl}://%1.webdevguru.co.uk%{REQUEST_URI} [R=301,L,NE]