将子目录重定向到子域,将非www重定向到www

时间:2013-09-14 10:14:01

标签: apache .htaccess redirect mod-rewrite http-status-code-301

我们假设我们有一个域名root.com 我在htaccess中添加了这些行,将非www重定向到www:

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

我还有一个子域:demo.root.com所以我在子目录root / demo中添加了一个htaccess,并添加了一些行来将子目录重定向到子域以避免直接访问子域使用root.com/demo或www.root.com/demo这里的子目录是添加的代码:

RewriteCond %{http_host} ^root.com [nc]
RewriteRule ^(.*)$ http://www.root.com/$1 [L,R=301]
RedirectMatch 301 ^/demo/(.*)$ http://demo.root.com/$1

现在的结果是:

  • 将非www重定向到主域root.com的www
  • 将子目录/ root / demo重定向到子域demo.root.com

问题是:

使用此url:root.com/demo(非www版本)不会将我重定向到demo.root.com,可能是因为有两个重定向:

  • 从非www到www
  • 从子目录到子域

似乎这个组合不会起作用

我想要什么?

组合:

  • 能够将主域从非www重定向到www,而不会在子域中出现问题
  • 将子目录重定向到子域

1 个答案:

答案 0 :(得分:0)

将这两条规则保留在主DOCUMENT_ROOT/.htaccess

RewriteRule ^demo(/.*|)$ http://demo.root.com$1 [R=301,L,NC]

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

demo/.htaccess删除现有规则。