Apache重定向配置失效求助:RHEL7.5环境下URL规则适配问题
Apache RewriteRule 重定向失效的排查与修复方案
我一眼就看出问题出在哪了——你的RewriteRule写法踩了Apache重写规则的典型坑:RewriteRule默认只匹配URL的路径部分(?之前的内容),不会包含查询字符串。你把?latitude=...这类查询参数写在规则的匹配模式里,自然永远触发不了重定向。
下面一步步给你解决:
1. 修正重写规则的核心写法
要匹配查询字符串,必须用RewriteCond来捕获%{QUERY_STRING}变量,再结合RewriteRule完成跳转。针对你的场景,正确的配置应该是这样:
RewriteEngine On # 匹配包含latitude、longitude、scale三个参数的查询字符串(顺序固定) RewriteCond %{QUERY_STRING} ^latitude=([^&]+)&longitude=([^&]+)&scale=([^&]+)$ # 匹配URL的路径部分,注意转义点号(.是正则通配符) RewriteRule ^/wp2/geoviewer-prod/wpc\.jsp$ http://newserver/server?lat=%1&lon=%2&zoom=%3 [R=302,L]
这里的关键细节:
%1/%2/%3对应RewriteCond里捕获的参数值,而非RewriteRule的捕获组[R=302,L]标记:R=302是临时重定向(方便测试,避免浏览器缓存),确认没问题后可改成R=301永久重定向;L表示匹配后停止处理后续规则
如果参数顺序不固定,可以调整RewriteCond的正则为:
RewriteCond %{QUERY_STRING} (?:^|&)latitude=([^&]+)(?:&|$) RewriteCond %{QUERY_STRING} (?:^|&)longitude=([^&]+)(?:&|$) RewriteCond %{QUERY_STRING} (?:^|&)scale=([^&]+)(?:&|$)
2. 检查mod_rewrite模块是否启用
RHEL7.5自带的Apache默认可能没启用重写模块,执行以下命令确认:
httpd -M | grep rewrite
如果输出里没有rewrite_module (shared),需要启用它:
# 编辑模块配置文件,确保该行没有被注释 vi /etc/httpd/conf.modules.d/00-base.conf # 找到并取消注释:LoadModule rewrite_module modules/mod_rewrite.so # 重启Apache生效 systemctl restart httpd
3. 确认配置放置的位置正确
- 推荐方式:把规则放在
/etc/httpd/conf.d/下新建的自定义配置文件里(比如rewrite-rules.conf),RHEL的Apache会自动加载这个目录下的.conf文件 - 如果用
.htaccess:需要确保目标目录的配置里开启了AllowOverride All,否则.htaccess的规则会被忽略(RHEL默认禁用.htaccess,不推荐生产环境使用)
4. 测试重定向是否生效
用curl命令模拟请求,查看响应头的Location字段:
curl -I http://your-rhel-server/wp2/geoviewer-prod/wpc.jsp?latitude=12.34&longitude=56.78&scale=10
如果返回的响应头里有Location: http://newserver/server?lat=12.34&lon=56.78&zoom=10,说明规则生效了。
内容的提问来源于stack exchange,提问作者user1174838
相关产品推荐
相关产品推荐

