重写CNAME子域

时间:2009-02-09 22:56:18

标签: mod-rewrite apache2

我有一个子域,我想使用mod_rewrite重定向到不同的位置。例如:

subdomain.example.com - > www.example.com/subdomain

我不想将重定向发送到浏览器(因此它不知道页面不同)。

BTW subdomain.example.com有一条指向example.com的CNAME记录。

修改

另一个例子,只是为了澄清。这很简单:如果在浏览器中输入http://x.abc.com,Apache将返回http://www.abc.com/x的内容。

3 个答案:

答案 0 :(得分:3)

如果两个域共享同一目录,则可以执行此操作以重写内部请求:

RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$
RewriteRule !^subdomain/ subdomain%{REQUEST_URI}

问题澄清后:这个适用于我:

RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$
RewriteCond %1.%{THE_REQUEST} ^([^.]+)\.[A-Z]+\ (/[^\ ]*)
RewriteCond %{DOCUMENT_ROOT}$1 !-d
RewriteRule ^([^/]+)? %1%2

但你最好跟Brandon说的那样。

答案 1 :(得分:1)

除了上面提到的Gumbo之外,您还可以使用Apache的VirtualDocumentRoot语句将URL动态映射到磁盘上的动态位置。它允许您使用URL的一部分在磁盘上构建路径。有关更多信息,请查看此链接:

http://httpd.apache.org/docs/2.2/mod/mod_vhost_alias.html

例:
URL = http://sub.example.com/dir/page.html
Server Path = /var/www/site.com/htdocs/sub/dir/page.html
VirtualDocumentRoot = /var/www/%-2.0.%-1.0/htdocs/%-3/

答案 2 :(得分:0)

RewriteCond %{HTTP_HOST} ^([^.]+)\.abc\.com$
RewriteRule ^(.*)$       http://www.abc.com/%1$1   [R=301]