Apache RewriteRule正则提取数字前三位改写URL失效求助
Apache RewriteRule 配置修复方案
问题分析
你之前的规则存在两个核心问题:
- 第一个规则未用括号捕获目标内容,
$1无对应匹配值,且仅匹配数字前三位,无法覆盖完整长数字串。 - 第二个规则放在
<Directory /openstack>段中,但请求URL/t/openstack/build/...对应的文件系统路径不在该目录范围内,导致规则根本不会被触发;同时正则缺少开头的/,在VirtualHost级别匹配时会失效。
正确配置步骤
1. 开启Rewrite引擎
在<VirtualHost *:443>块的最上方添加:
RewriteEngine On
2. 放置正确的RewriteRule
将规则直接放在<VirtualHost *:443>块下(不要嵌套在<Directory /openstack>内),使用以下规则:
# 匹配/t/openstack/build/后跟任意长度数字的URL,提取前三位数字重写 RewriteRule ^/t/openstack/build/(\d{3})(\d+)$ /$1/openstack/$1$2 [R=302,L]
规则说明
^/t/openstack/build/:匹配URL的固定前缀(\d{3}):捕获数字的前三位,对应$1(\d+):捕获剩余的所有数字,对应$2/$$1/openstack/$1$2:重写后的路径,$1$2拼接出完整的原始数字串R=302:临时重定向(测试阶段用,确认生效后改为R=301永久重定向)L:终止后续规则处理
3. 避免缓存干扰
测试时建议使用浏览器隐私窗口,或清除浏览器缓存,防止之前错误的301重定向缓存导致规则看似不生效。
额外注意事项
若你的/t/openstack/build/路径对应特殊的文件系统目录,需将规则放在对应路径的<Directory>块中,同时调整正则为相对路径(去掉开头的/):
# 假设/t/openstack/build/对应文件系统路径/var/www/t/openstack/build/ <Directory /var/www/t/openstack/build/> RewriteEngine On RewriteRule ^(\d{3})(\d+)$ /$1/openstack/$1$2 [R=302,L] </Directory>
内容的提问来源于stack exchange,提问作者Jean Pierre Roquesalane
相关产品推荐
相关产品推荐

