Apache:在两个虚拟主机中提供一个目录

Apache:在两个虚拟主机中提供一个目录

我尝试在两个站点之间共享一个 WordPress 插件目录。问题是脚本可以工作,但 URL 不行。它们以一种奇怪的方式输出,路径在那里,但实际上不应该在那里。这与插件或其他任何东西都无关,只要我不使用符号链接,它就可以正常工作。

http://demo.secret.local/bla/wp-content/plugins/var/www/共享/插件/debug-bar/css/debug-bar.css?ver=20111209

sudo chown -R "$USER":www-data /var/www
find /var/www -type f -exec chmod 0660 {} \;
sudo find /var/www -type d -exec chmod 2770 {} \;

也尝试了 777 权限,但似乎没有什么区别

/var/www/shared/plugins <- Files are working, URLS get screweed up
/var/www/secret.com/htdocs/wp-content/plugins      -> symlinked to -> /var/www/shared/plugins
/var/www/demo.secret.com/htdocs/wp-content/plugins -> symlinked to -> /var/www/shared/plugins

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName secret.local

    DocumentRoot /var/www/secret.com/htdocs

    <Directory />
        Options FollowSymLinks Indexes
        AllowOverride All
    </Directory>

    <Directory /var/www/secret.com/htdocs/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Order deny,allow
        deny from all
        allow from 127.0.0.1
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/secret.com-error.log
    CustomLog ${APACHE_LOG_DIR}/secret.com-access.log combined

</VirtualHost>

其他 VHost 也一样

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName demo.secret.local

    DocumentRoot /var/www/demo.secret.com/htdocs

    <Directory />
        Options FollowSymLinks Indexes
        AllowOverride All
    </Directory>

    <Directory /var/www/demo.secret.com/htdocs/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Order deny,allow
        deny from all
        allow from 127.0.0.1
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/demo.secret.com-error.log
    CustomLog ${APACHE_LOG_DIR}/demo.secret.com-access.log combined

</VirtualHost>

我以前有过这种设置,实际上只是符号链接到另一个网站。我不确定,但我认为我以前有过这种设置。当我禁用链接到的网站时,它实际上是可以工作的。这就是为什么我现在将共享文件夹完全移出两个网站。但现在我遇到了同样的问题。这让我抓狂。

我可以把目录挂载在那里,这样就没问题了,但如果我不小心删除了挂载的文件夹,我就会删除文件。这应该适用于符号链接。请告诉我怎么做。

我还尝试将第三个目录块设置为 /var/www/shared,其规则与 .com 目录相同,但这似乎没有任何区别。

附加问题:我不太理解这一部分。

    <Directory />
        Options FollowSymLinks Indexes
        AllowOverride All
    </Directory>

答案1

与多个 VirtualHosts 共享内容的典型解决方案之一是使用 apacheAlias指令:

<VirtualHost *:80>
    ServerName secret.local
    Alias /wp-content/plugins/ /var/www/shared/plugins/
    ...
</VirtualHost>
<VirtualHost *:80>
    ServerName demo.secret.local
    Alias /wp-content/plugins/ /var/www/shared/plugins/
    ...
</VirtualHost>

这是否适合您取决于共享内容的类型,例如,如果脚本尝试获取文件(例如,../../wd-config.php读取正确的数据库连接字符串),它将尝试在 /var/www/ 而不是 VirtualHosts 的 DocumentRoot 中获取文件,因此失败。

相关内容