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

Apache RewriteRule正则提取数字前三位改写URL失效求助

Apache RewriteRule 配置修复方案

问题分析

你之前的规则存在两个核心问题:

  1. 第一个规则未用括号捕获目标内容,$1无对应匹配值,且仅匹配数字前三位,无法覆盖完整长数字串。
  2. 第二个规则放在<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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:05:14