将子域重写到同一服务器中的目录

时间:2014-01-14 11:25:48

标签: apache .htaccess mod-rewrite wildcard-subdomain

我有域名,请说 mydomain.com

我希望每个子域都加载具有相同名称的目录内容...例如,如果有人写了

http://sub.mydomain.com/index.php

我想向他展示

的内容

http://sub.mydomain.com/sub/index.php

但是,我希望它在地址栏中显示http://sub.mydomain.com/index.php

apache vhost就像

<VirtualHost *:80>
  ServerName *.mydomain.com
  DocumentRoot /var/www/vhosts/mydomain.com/subdomains/subs/www
  ... more stuff ...
</VirtualHost>

所以在文件系统中,上面例子的文件将在

目录下

/var/www/vhosts/mydomain.com/subdomains/subs/www/sub

我在这里尝试了许多提议的解决方案,但其中大多数是重定向到其他域/子域或最终在重定向循环中:(

TIA

2 个答案:

答案 0 :(得分:2)

您需要添加一些重写规则来检查子域,然后重写到相关路径:

<VirtualHost *:80>
  ServerName mydomain.com
  ServerAlias *.mydomain.com

  RewriteEngine On
  RewriteCond %{HTTP_HOST} (.*)\.mydomain\.com
  RewriteRule ^/(.*)$ /%1/$1

  DocumentRoot /var/www/vhosts/mydomain.com/subdomains/subs/www

  ... more stuff ...

</VirtualHost>

这将捕获“.mydomain.com”之前的任何内容,然后将其重写为URL为%1,$ 1将是所请求的资源,例如index.html

请注意,如果www.mydomain.com是您网站的有效域名,这可能会让您失望!

答案 1 :(得分:0)

DOCUMENT_ROOT/.htaccess文件中试用此代码:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^sub\.[^.]+\.[^.]+$ [NC]
RewriteRule !^sub(|/$) /sub%{REQUEST_URI} [L,NC]