![Apache:在两个虚拟主机中提供一个目录](https://linux22.com/image/622545/Apache%EF%BC%9A%E5%9C%A8%E4%B8%A4%E4%B8%AA%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E4%B8%AD%E6%8F%90%E4%BE%9B%E4%B8%80%E4%B8%AA%E7%9B%AE%E5%BD%95.png)
我尝试在两个站点之间共享一个 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 中获取文件,因此失败。