【问题标题】:How to redirect directory to sub-domain, and www sub-domain to non-www sub-domain?如何将目录重定向到子域,将 www 子域重定向到非 www 子域?
【发布时间】:2012-04-01 16:28:04
【问题描述】:

注意:仅使用<VirtualHost> 参数。

如何将目录(例如 example.com/groups/)重定向到子域(例如 groups.example.com),以及该子域的 www(www.groups.example.com)重定向到该子域的非 www URL -域(groups.example.com)?


准确地说(⇒ 代表“应该 301 重定向到”):

example.com/groups/groups.example.com

www.groups.example.comgroups.example.com


我读到使用<VirtualHost> 比所有通常使用的重定向规则更好(即在磁盘 i/o 上使用重定向引擎 is pretty heavy)。所以,如果可能的话,我想在 .htaccess / httpd.conf 中使用<VirtualHost> 解决上述问题。谢谢!

【问题讨论】:

    标签: .htaccess redirect http-status-code-301 virtualhost


    【解决方案1】:

    这样的东西应该可以工作

    <VirtualHost *:80>
        ServerName example.com 
        ServerAlias groups.example.com www.groups.example.com
    
        RewriteEngine on
        # example.com/groups/ -> groups.example.com
        RewriteCond %{SERVER_NAME}  ^example\.com$
        RewriteRule ^/(\w+)/?$  http://$1.example.com [R=301,L]
    
        # www.groups.example.com -> groups.example.com
        RewriteCond %{SERVER_NAME}  ^www\.(\w+)\.example\.com$
        RewriteRule ^/(.*)$ http://%1.example.com/$1 [R=301,L]
    </VirtualHost>
    

    或专门针对团体

    <VirtualHost *:80>
        ServerName example.com 
        ServerAlias groups.example.com www.groups.example.com
    
        RewriteEngine on
        # example.com/groups/ -> groups.example.com
        RewriteCond %{SERVER_NAME}  ^example\.com$
        RewriteRule ^/groups/?$  http://groups.example.com [R=301,L]
    
        # www.groups.example.com -> groups.example.com
        RewriteCond %{SERVER_NAME}  ^www\.groups\.example\.com$
        RewriteRule ^/(.*)$ http://groups.example.com/$1 [R=301,L]
    </VirtualHost>
    

    【讨论】:

    • 它不起作用,因为您缺少第二行中的目录(/groups/)。你能纠正一下吗? 编辑: 出了点问题。即使进行了更正,它也不起作用。
    • 在我的服务器上测试过,它们都可以工作。也许您没有在这些行之前添加 RewriteEngine ?修改了我的答案以反映示例 httpd 配置