Wordpress MU subdomain vhost

时间:2011-06-01 作者:xLRDxREVENGEx

好的,我有一个带有子域的mu设置,需要一个子域来指向不同的路径。我的问题是,我将加载的vhost文件添加到wordpress之前,并为vhost配置中没有指定路径的所有内容加载它的路径。但如果我在wordpress域安装后加载,它会尝试为输入的子域创建一个站点。

我需要的是:sub2。mydomain。com-指向/路径/到/子/目录
*。mydomain。com-指向/path/to/wordpress/install

UPDATE:
我正在使用一个域映射插件,我认为这是导致我的问题的原因。所有子站点都加载良好,但当我将映射域加载到子站点时,它不起作用。

我无法每次都将映射的域添加到vhost配置中,因为我计划允许其他人映射域

3 个回复
最合适的回答,由SO网友:xLRDxREVENGEx 整理而成

由于我的域映射插件不执行cname(wpmudev域映射),因此我无法使用cname建议。至于ip地址,这是未经测试的,因为我不想在这个时候增加更多的托管费用,也许在这个功能中,我会试一试。订购vhost和分配别名很有效,但正如我在之前的评论中所说,我计划允许其他用户映射域名,这意味着每次注册域名时,我都必须手动添加它。

My solution is this:
我用自己选择的子域创建了一个wp站点,然后在wp根文件夹中创建了一个sym链接(我知道我可以从任何站点访问,但不是很多人不会这样),所以当我键入子域1时。mydomain。com/analytics它将加载与我的问题跟踪脚本相同的分析。通过创建站点,我可以创建一个页面,显示可以访问的服务列表。

感谢John P Bloch的帮助,我知道这完全不是WordPress的问题,但因为这是我的域映射插件,所以对我来说也足够了,谢谢你EAMann,这会起作用,但正如我上面所说,我每次都需要创建一个s别名。

SO网友:John P Bloch

基本上,您需要两个专用IP地址,或者第三个vhost。

IP地址可以使用两个IP地址,并在apache配置中执行以下操作:

#IP address for WP
NameVirtualHost 12.34.56.78:80
#For everything else
NameVirtualHost *:80
然后,确保VirtualHost WordPress声明如下:

<VirtualHost 12.34.56.78:80>
以及所有其他VirtualHost WordPress之前声明的块使用另一个块:

<VirtualHost *:80>
这应该行得通。我根本没有测试过这个,所以它可能不起作用。另外,我不确定第二个字母中是否使用星号NameVirtualHost 线路将正常工作;再次:未测试。

CNAME假设您的域映射插件允许这样做,请使用路由映射域的“CNAME”方法,而不是“IP”方法。使用类似“地图”的东西。领域com和have-mapped-domains指向一个cname(这将阻止他们使用其域的根,但他们应该能够301重定向example.com到www.example.com)

为“map”添加另一个VirtualHost条目。领域com”作为第一个vhost条目,镜像域的主vhost条目,特别是:文档根。

同样,这也是未经测试的。

子域配置(旧答案)

我将使用自己站点的虚拟主机文件作为示例。这是一个文件:

# Virtual host for the subdomain first
<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName drupal.johnpbloch.com
    # Note that the document root and all other paths are different from the domain\'s primary virtual host below.
    DocumentRoot /path/to/subdomain/directory/htdocs/
    ErrorLog /path/to/subdomain/directory/logs/error.log
    CustomLog /path/to/subdomain/directory/logs/access.log combined
    <Directory /path/to/subdomain/directory/htdocs/>
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
# Virtual host for the main site next
<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName johnpbloch.com
    ServerAlias www.johnpbloch.com
    ServerAlias *.johnpbloch.com
    DocumentRoot /path/to/main/site/directory/htdocs/
    ErrorLog /path/to/main/site/directory/logs/error.log
    CustomLog /path/to/main/site/directory/logs/access.log combined
    <Directory /path/to/main/site/directory/htdocs/>
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
不必全部放在一个文件中;重要的是Apache首先加载更具体的虚拟主机。这意味着任何虚拟主机在任何ServerAlias 必须在任何具有这些通配符值的虚拟主机之前加载值。

在WordPress内部或周围,没有任何价值、设置,也没有任何可能解决您问题的方法。当请求到达WordPress时,为时已晚。Apache已经加载了虚拟主机,已经解析了主机,并且将始终按照它的方式路由流量。如果流量到达WordPress时不应该这样,那就是服务器配置问题。不是WordPress。

SO网友:EAMann

我在我的服务器上也遇到了这个问题,我可以向你保证约翰的回答是正确的。为了证明这一点,以下是vhost 我自己的Apache配置文件中的节:

<VirtualHost *:80>
    ServerName prosepainting.com
    ServerAlias www.prosepainting.com *.prosepainting.com
    DocumentRoot /var/www/html/eamann
</VirtualHost>
<VirtualHost *:80>
    ServerName mindsharestrategy.com
    ServerAlias www.mindsharestrategy.com *.mindsharestrategy.com
    DocumentRoot /var/www/html/eamann
</VirtualHost>
<VirtualHost *:80>
    ServerName groundedchristianity.com
    ServerAlias www.groundedchristianity.com *.groundedchristianity.com
    DocumentRoot /var/www/html/eamann
</VirtualHost>
<VirtualHost *:80>
    ServerName prose.eamann.com
    DocumentRoot /var/www/html/eamann
</VirtualHost>
<VirtualHost *:80>
    ServerName business.eamann.com
    DocumentRoot /var/www/html/eamann
</VirtualHost>
<VirtualHost *:80>
    ServerName git.eamann.com
    DocumentRoot /home/git/repositories
</VirtualHost>
<VirtualHost *:80>
    ServerName eamann.com
    ServerAlias www.eamann.com *.eamann.com
    DocumentRoot /var/www/html/eamann
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot /var/www/html
</VirtualHost>
我这样设置它是因为我会有选择地打开和关闭每个映射域进行测试。但我安装的WordPress中的所有站点都是eamann.com 并通过*.eamann.com 公告要设置映射域,我还需要添加它们。

为了简化操作,此配置将执行完全相同的操作:

<VirtualHost *:80>
    ServerName git.eamann.com
    DocumentRoot /home/git/repositories
</VirtualHost>
<VirtualHost *:80>
    ServerName eamann.com
    ServerAlias www.prosepainting.com *.prosepainting.com www.mindsharestrategy.com *.mindsharestrategy.com www.groundedchristianity.com *.groundedchristianity.com www.eamann.com *.eamann.com
    DocumentRoot /var/www/html/eamann
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot /var/www/html
</VirtualHost>
我的git.eamann.com 域被定向到一个位置(我的Git存储库文件夹),但WordPress仍将看到所有其他子域,我的映射域也将指向WordPress。

结束

相关推荐

Multisite behind Varnish

我正在尝试将varnish与wp 3.0.5网站(Multisite)一起使用,当我访问varnish URL时,我收到以下消息:Multisite only works without the port number in the URL. 我是否需要自定义VCL来实现此功能?我正在为其他工作正常的wordpress站点使用相同的后端配置。。如果我需要在serverfault上询问此问题,请告诉我,我会在那里询问。