三级域名

时间:2012-10-22 20:57:37

标签: apache dns apache2.2

我正在使用Virtualmin API创建一系列使用php的三级域名(直到这里一切正常)。我需要一个解决方案来为这些子域中的每个子域提供相应的子目录,即,sub1.domain.com进入C:\ xampp \ htdocs \ domain_com \ subsites \ sub1;
sub2.domain.com => C:\ XAMPP \ htdocs中\ domain_com \ \子网站SUB2。我也应该使用Virtualmin API,但是用户可以看到重定向的子目录,这很糟糕。应该在子目录中使用httpd.conf中的通用解决方案转换子域,以便不连续地修改和重新启动Apache。同时,向用户显示的URL必须保留为“sub1.domain.com/whatever_dir/user_file.php”。 我试图用RewriteRule来获取它,就像这些:

<VirtualHost *:80>
    ServerName www.domain.com
    ServeAlias *.domain.com
    DocumentRoot C:/xampp/htdoc/domain_com/
    Option +FollowSymLinks
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www.domain.com
    RewriteCond %{HTTP_HOST} ^(w*).domain.com
    RewriteRule ^$ subsites/%1%{REQUEST_URI}
</VirtualHost>

使用此规则,我成功调用'%1'目录中的所有文件。但是,如果这些文件中的任何一个调用图片或任何其他资源,则此资源的路径始终指向文档根目录,而不是调用文件。所以文件被正确调用但资源路径错误!

它也可以使用Alias,AliasMatch。我开始意识到Alias和RewriteRules并不是实现这一目标的正确手段,但我不知道其他任何目标。

感谢您的关注。我希望有人有个建议。 Emanuele的。

2 个答案:

答案 0 :(得分:1)

凯文,

你应该看看http://httpd.apache.org/docs/2.2/mod/mod_vhost_alias.html为你做这件事。只要目录结构保持不变,您就不必再对配置进行任何更改。

答案 1 :(得分:0)

我随便修复了自己的问题。 RewriteRule具有将请求重定向到其他位置的效果。每次这样做时,Apache都会回想起它的新设备,这导致了内部服务器错误! - 对不起,我不知道如何使用这个博客。这是修复。

<VirtualHost :80>
  ServerName www.domain.it
  ServerAlias *.domain.it
  DocumentRoot "C:/xampp/htdocs/domain_com"
  <Directory "C:/xampp/htdocs/domain_com">
   Options FollowSymlinks
   RewriteEngine On
   RewriteCond %{HTTP_HOST} !^www.
   RewriteCond %{HTTP_HOST}%{REQUEST_URI} ^([0-9A-Za-z_-]+).domain.com(.*/?)([0-9A-Za-z-_.?&=%])$
   RewriteRule !^siti siti/%1/%2%3
  </Directory>

首先,规则首先在请求中添加前缀“siti /”,以及我需要的其他内容。当Apache再次在路径上转动时,它与新的匹配而不是“!”,以“siti”开头“^”,并停止它。事实上它完美地运作。