Apache重定向:替换URL中所有旧域名(含端口)实例求助
Apache重定向处理含旧URL的锚点内容解决方案
一、服务器端重定向(Apache mod_rewrite)
在旧域名的Apache配置文件(httpd.conf)或.htaccess中添加以下规则,将所有旧域名请求重定向到新域名,路径、查询字符串会被保留,浏览器也会自动携带锚点内容:
# 启用重写引擎 RewriteEngine On RewriteBase / # 匹配旧域名(忽略大小写),重定向到新域名 RewriteCond %{HTTP_HOST} ^old\.url\.com:9443$ [NC] RewriteRule ^(.*)$ https://new.url.com:9443/$1 [R=301,L,NE]
R=301:永久重定向,帮助搜索引擎更新收录L:标记为最后一条规则,停止后续规则匹配NE:禁止对URL中的特殊字符(如%)再次转义,避免破坏锚点里的编码内容
二、客户端锚点内容替换(JavaScript)
浏览器不会把锚点(#之后的内容)发送到服务器,所以服务器无法直接修改这部分内容,需要在新域名的页面中添加JS代码,批量替换锚点里所有旧URL的编码值:
function updateHashUrl() { // 旧URL的编码值(对应https://old.url.com:9443) const oldEncoded = '%3A%2F%2Fold.url.com%3A9443'; // 新URL的编码值(对应https://new.url.com:9443) const newEncoded = '%3A%2F%2Fnew.url.com%3A9443'; if (window.location.hash) { // 全局替换所有旧编码值 const updatedHash = window.location.hash.replace(new RegExp(oldEncoded, 'g'), newEncoded); if (updatedHash !== window.location.hash) { // 无刷新更新URL锚点 window.history.replaceState(null, document.title, updatedHash); // 若需刷新页面使新锚点生效,替换为下面一行: // window.location.href = window.location.origin + window.location.pathname + window.location.search + updatedHash; } } } // 页面加载时执行替换 window.addEventListener('load', updateHashUrl); // 监听锚点变化,动态处理 window.addEventListener('hashchange', updateHashUrl);
把这段代码加到新域名所有页面的公共头部或尾部,确保页面加载时自动处理锚点内容。
关键说明
- 服务器端重定向负责切换基础域名,客户端JS负责处理锚点中嵌套的旧URL编码内容
- 若旧、新域名部署在同一服务器,可直接在同一配置文件中完成规则设置,无需跨服务器跳转
内容的提问来源于stack exchange,提问作者HelAu
相关产品推荐
相关产品推荐

