2

我正在使用 Virtualmin API 使用 php 创建一系列第三级域(直到这里一切正常)。我需要一个解决方案来为每个子域提供相应的子目录,即
sub1.domain.com 位于 C:\xampp\htdocs\domain_com\subsites\sub1;
sub2.domain.com => C:\xampp\htdocs\domain_com\subsites\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 不是实现此目标的正确方法,但我不知道其他任何方法。

感谢关注。我希望有人有一个建议。伊曼纽尔。

4

2 回答 2

1

凯文,

您应该查看http://httpd.apache.org/docs/2.2/mod/mod_vhost_alias.html为您执行此操作。只要目录结构保持不变,您以后就不必对配置进行任何更改。

于 2012-10-22T21:06:17.793 回答
0

J已经随便解决了自己的问题。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 再次打开路径时,它将新路径与 not "!" 匹配,以 "siti" 开头的 "^" 并停止它。事实上,它功能完美。

于 2012-11-06T11:10:30.940 回答