【问题标题】:HTAccess 'Mirror Domain', respecting SSL, respecting co.uk+.com, keeping subdomain and request_uriHTAccess '镜像域',尊重 SSL,尊重 co.uk+.com,保留子域和 request_uri
【发布时间】:2014-04-14 14:02:35
【问题描述】:

出于 SEO 和简单的目的,我想将多个域映射到一个主域。

我的三个域是

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]

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

提前致谢

【问题讨论】:

    标签: regex apache .htaccess redirect


    【解决方案1】:

    好的,我试试看:

    # 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]
    

    【讨论】:

    • ### qoo.example1.co.uk => qoo.example1.co.mainexample.co.uk ### qoo.mainexample.co.uk => qoo.mainexample.co.uk {FUNCTIONAL} ### 不工作有空子域?你确定,对我来说很好......这很奇怪,因为你说它不起作用。
    • 工作完美,除非文件夹不存在,否则它不会重定向到域,这是一种可能性吗?喜欢:t3chguy.co.uk/?foobar 有效而:t3chguy.co.uk/foobar 无效。
    • 好吧,我不明白为什么它不能与附加的文件夹一起使用。您的意思是 t3chguy.co.uk/?foobar 正确重定向到 www.mainexample.co.uk/?foobar 但 t3chguy.co.uk/foobar 根本不重定向?
    • 我猜是因为你没有子域。我已经更新了我的答案,现在就试试吧。
    • 效果很好,除了 webdevguru.co.uk [mainexample.co.uk] 不重定向到 www.webdevguru.co.uk
    【解决方案2】:

    您可以使用这些规则:

    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]
    

    【讨论】:

    • ### qoo.example.co.uk 重定向到 www.mainexample.co.uk ### qoo.mainexample.co.uk 重定向到 .mainexample.co.uk
    • 随意测试它,qoo.t3chguy.co.uk 重定向到 www.webdevguru.co.uk qoo.webdevguru.co.uk 是一个不存在的域,但我有 * 子域指出在我的 public_html 上,这是在您上面的脚本之前起作用的,无论如何,谢谢;如果您设法修复它,我会很高兴,但感谢您的尝试。
    • 您是否在任何问题之前提到过webdevguru?首先明确说明所有有问题的需求,然后再进行测试。
    • webdevguru.uk is mainexample t3chguy.co.uk is example1 我还有一些其他的域,.com 和 .co.uk 但以上是主要的。
    • 好的,那么显然示例字符串需要从问题中替换,因为您没有提供所有正确的域名。
    猜你喜欢
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 2013-07-14
    • 2013-09-26
    • 2013-06-16
    相关资源
    最近更新 更多