配置Apache HTTPD反向代理:仅重定向主机名URL,其余请求按规则处理
Apache HTTPD反向代理:仅根路径重定向,其余路径按规则代理
核心需求实现思路
只对精确根路径(https://site1.com/,无任何子路径)执行指定重定向/代理逻辑,其余路径(如/wsdata、/run等)保留原有代理规则。关键是通过mod_rewrite精确匹配根请求,避免全局ProxyPass覆盖其他路径规则。
修改后的完整配置
<VirtualHost *:443> ServerName site1.com ErrorLog /var/log/httpd/site1.com-443-error_log TransferLog /var/log/httpd/site1.com-443-access_log # 443端口必须配置SSL,补充证书路径 SSLEngine on SSLCertificateFile /path/to/your/certificate.pem SSLCertificateKeyFile /path/to/your/private-key.pem # 仅处理根路径请求 RewriteEngine On # 精确匹配根路径(不含子路径) RewriteCond %{REQUEST_URI} ^/$ # 内部代理(URL地址栏不变),如需外部跳转则替换为[R=301,L] RewriteRule ^/$ https://site1.com/run/?app_name=App1&page_name=Page1/ [P,L] # 保留/wsdata路径的WebSocket代理规则 <Location /wsdata> ProxyPass https://site1.com/ ProxyPassReverse https://site1.com/ RewriteEngine On RewriteCond %{HTTP:UPGRADE} websocket [NC] RewriteCond %{HTTP:CONNECTION} upgrade [NC] RewriteRule .* "wss://site1.com%{REQUEST_URI}" [P] </Location> # 保留/run路径的代理规则 <Location /run> ProxyPass https://site1.com/run/ ProxyPassReverse https://site1.com/run/?app_name=App1&page_name=Page1/ </Location> # 如需添加其他路径的代理规则,可在此补充 # 示例:ProxyPass /api https://site1.com/api/ # ProxyPassReverse /api https://site1.com/api/ </VirtualHost>
关键配置说明
- 根路径匹配:
RewriteCond %{REQUEST_URI} ^/$确保只触发精确的根请求,不会影响任何带子路径的URL。 - 代理/重定向选择:
- 使用
[P,L]:内部代理,用户地址栏仍显示https://site1.com/,但实际请求转发到目标地址。 - 使用
[R=301,L]:永久重定向,用户地址栏会直接跳转到目标URL。
- 使用
- 模块依赖:确保Apache已启用以下模块:
# Debian/Ubuntu系统 a2enmod proxy proxy_http rewrite proxy_wstunnel # RHEL/CentOS系统 # 在httpd.conf中添加: LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule rewrite_module modules/mod_rewrite.so LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so - 配置验证:修改后执行
apachectl configtest检查语法,无误后重启Apache服务。
内容的提问来源于stack exchange,提问作者Cássio Silva
相关产品推荐
相关产品推荐

