如何在Apache中实现/url1/*到url2/moved.html的301重定向
适配需求的Apache重写规则配置
规则会严格限定作用范围,仅覆盖domain.name:9082下/url1/路径的所有请求,完全不干扰其他路径的正常访问,最终返回301永久重定向指向/url2/moved.html静态维护页。
方案1:直接在主VirtualHost配置中追加规则(推荐,性能更优)
你当前的配置已经在站点根目录的Directory块中开启了RewriteEngine和AllowOverride,不需要额外加载模块,直接在对应块中追加重写规则即可:
<Directory "/var/www/home"> Require all granted RewriteEngine on AllowOverride all # 追加的核心重写规则 RewriteRule ^url1(/.*)?$ /url2/moved.html [R=301,L] </Directory>
规则参数说明:
- 正则
^url1(/.*)?$会精准匹配两类请求:站点根路径下的/url1本身、/url1/下的任意子路径/文件,不会误匹配/url1abc、/test/url1/xxx这类不符合预期的路径 R=301:强制返回301永久重定向响应码L:标记规则为匹配后立即停止,命中规则的请求不会再触发后续其他重写逻辑
方案2:通过目录级.htaccess配置(隔离性更强,无需修改主配置)
因为当前配置开启了AllowOverride all,可以直接在/var/www/home/url1/目录下创建.htaccess文件,写入以下规则:
RewriteEngine On RewriteRule ^.*$ /url2/moved.html [R=301,L]
这种方式的规则仅对url1目录下的请求生效,完全和站点其他路径隔离,不存在误伤风险。
配置后验证流程
- 修改完主配置后先执行
apachectl configtest检查语法,确认无报错后再重载Apache服务 - 测试访问时注意带上监听端口9082,访问各类
/url1开头的路径,确认均跳转到/url2/moved.html且返回301状态码 - 访问其他路径(如
/url2下的其他页面、站点根目录其他路径),确认访问不受重写规则影响
注意:不要在规则中额外编写全局匹配逻辑,避免重定向范围扩大到无关路径。
内容的提问来源于stack exchange,提问作者DeviseD
相关产品推荐
相关产品推荐

