You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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>

关键说明

  1. ProxyPass /store !:这是核心,告诉Apache/store开头的请求不要转发到WordPress代理,留给后续的Alias处理。
  2. Alias /store /var/www/store:将URL中的/store路径直接映射到宿主机的/var/www/store目录。
  3. <Directory>权限配置:必须添加,否则Apache会因权限限制拒绝访问宿主机目录。Require all granted允许所有请求访问,Options可根据需求调整(比如关闭Indexes禁止目录列表)。

后续操作

  1. 调整宿主机目录权限,确保Apache运行用户(通常是www-data)能读取该目录:
    sudo chown -R www-data:www-data /var/www/store
    sudo chmod -R 755 /var/www/store
    
  2. 重启Apache服务使配置生效:
    sudo systemctl restart apache2
    

内容的提问来源于stack exchange,提问作者Liso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:05:33