如何用Apache2将example.com/store指向Docker外的目录
问题解决:Apache代理WordPress同时映射宿主机目录
你的核心问题是所有请求先被代理到WordPress容器,导致/store路径的映射规则根本没机会生效。原配置里的<Location />会匹配所有请求,包括/store,这些请求直接被转发到WordPress,而WordPress没有对应路由,所以返回404错误。
正确配置方案
修改HTTPS的VirtualHost配置,调整代理规则和目录映射的顺序,同时添加权限配置:
<VirtualHost *:80> ServerName example.com Redirect permanent / https://example.com/ </VirtualHost> <VirtualHost *:443> RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME} RequestHeader set "X-Forwarded-SSL" expr=%{HTTPS} ServerAdmin kontak@japati.net ServerName example.com ProxyRequests Off # 优先排除/store路径,不代理到WordPress ProxyPass /store ! # 其余所有路径代理到WordPress容器 ProxyPass / http://127.0.0.1:8100/ ProxyPassReverse / http://127.0.0.1:8100/ # 映射URL路径/store到宿主机物理目录 Alias /store /var/www/store # 配置目录访问权限,确保Apache能读取该目录 <Directory /var/www/store> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> SSLEngine on SSLCertificateFile /opt/acme-cert/example.com/cert.pem SSLCertificateKeyFile /opt/acme-cert/example.com/site.key SSLCertificateChainFile /opt/acme-cert/example.com/fullchain.cer ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
关键说明
ProxyPass /store !:这是核心,告诉Apache/store开头的请求不要转发到WordPress代理,留给后续的Alias处理。Alias /store /var/www/store:将URL中的/store路径直接映射到宿主机的/var/www/store目录。<Directory>权限配置:必须添加,否则Apache会因权限限制拒绝访问宿主机目录。Require all granted允许所有请求访问,Options可根据需求调整(比如关闭Indexes禁止目录列表)。
后续操作
- 调整宿主机目录权限,确保Apache运行用户(通常是
www-data)能读取该目录:sudo chown -R www-data:www-data /var/www/store sudo chmod -R 755 /var/www/store - 重启Apache服务使配置生效:
sudo systemctl restart apache2
内容的提问来源于stack exchange,提问作者Liso
相关产品推荐
相关产品推荐

