如何使用 .htaccess 将任何外部链接重定向到特定的 url 格式?

2024-04-10

我想重定向所有外部链接,即像这样的链接http://www.someothersite.com/anything在我的网站上(比如说http://www.example.com) to http://www.example.com/something.

这里我面临的问题是如何照顾http://www.someothersite.com/anything因为它的值不是固定的。它可以来自任何不同的域。


首先,.htaccess配置一个 HTTP 服务器来处理incoming请求,资源请求your服务器,而不是外部服务器。但既然你已经明确要求.htaccess重定向外部链接的方法,我将概述三种方法:

  1. Use .htaccess and mod_substitute将页面上的所有外部链接替换为固定的内部链接。
  2. 使用 PHP 和输出缓冲将所有外部链接替换为内部链接。
  3. 使用 JavaScript 在点击时将外部链接重定向到内部链接。

所有方法都有优点和缺点。

1. .htaccess and mod_substitute

如果还没有测试过,但从理论上讲,它应该可以工作。

将以下内容放入您的.htaccess并替换www.yourdomain.com与您的域名:

AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|(<a\s[^>]*)href=\"https?://([^/]+)(?<!www\.yourdomain\.com)/[^\"]*\"|$1href=\"http://www.yourdomain.com/your-fixed-link\"|i"

这会向所有包含 HTML 内容的请求正文添加一个输出过滤器,并使用正则表达式来替换href每个链接与固定链接的属性。

缺点:

  • 您的域名必须是固定的(sub2.yourdomain.com and yourdomain.com将被视为外部)。
  • 您必须使用具有以下功能的 Apache HTTP 服务器:mod_substitute loaded.

2. PHP 和输出缓冲

如果您已经使用 PHP 生成页面,则可以使用回调添加输出缓冲,该回调将外部链接替换为内部链接:

<?php
function replace_links($html)
{
    return preg_replace('~(<a\s[^>]*)href="https?://([^/]+)(?<!www\\.yourdomain\\.com)/[^"]*"~i', '$1href="http://www.yourdomain.com/your-fixed-link"', $html);
}

ob_start('replace_links');

// generate page
?>

这将阻止 PHP 将页面内容直接发送到浏览器,而是将所有内容写入内部缓冲区。在脚本结束时,将执行回调,并且可能会在将缓冲区发送到浏览器之前修改该缓冲区的内容。

相比之下的优势.htaccess method:对替换的更多控制。您可以使用以下命令从替换中排除多个内部域preg_replace_callback与检查链接中实际域的回调结合使用。此外,替换的URL不必是固定的。

3. 使用 JavaScript 重定向

下面的 JavaScript 可能是最流行的实现你想要的方式:

(function() {
    function redirectLink(evt) {
        var matches = /^https?:\/\/([^\/]+)\//i.exec(this.href);
        if (matches && matches[1] != 'www.yourdomain.com') {
            window.location.href = 'http://www.yourdomain.com/your-fixed-link';
            evt.preventDefault();
            return false;
        }
    }

    var links = document.getElementsByTagName('a'), i;
    for (i = 0; i < links.length; i++)
        links[i].addEventListener('click', redirectLink, false);
})();

只需确保此代码放置在所有链接之后(例如文档末尾)或在DOMContentLoaded event.

相比之下的优势.htaccess method:与上述 PHP 方法相同。

缺点:用户必须启用 JavaScript,因此不能保证始终有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 .htaccess 将任何外部链接重定向到特定的 url 格式? 的相关文章

  • 了解 htaccess 文件匹配代码

    我正在尝试将 drupal 安装在我的 bluehost 托管网站的子目录中 这是一个巨大的痛苦 我认为 htaccess 中的以下几行是问题所在 当我当前导航到 mysite com subdir install php 时 出现 403
  • 如何在cpanel上部署nextjs应用程序?

    我按照以下步骤在 cPanel 上部署 nextjs 转到 package json 并添加以下行 homepage http afsanefadaei ir run next build具有 next文件夹作为我的构建文件夹 go to
  • 在 Apache 中使用 mod_rewrite 处理中文字符

    我无法找到有关使用中文字符的 Apache mod rewriting 的信息 我能找到的所有信息都与数字有关 我想重写 character php character 宠 其中字符是搜索结果 因此会有所不同 character 宠 这是我
  • 在页面重新加载时传递 $_GET 参数[重复]

    这个问题在这里已经有答案了 我试图做到这一点 以便当页面重新加载时 它使用与上一页相同的 GET 参数来重定向我 现在我正在尝试使用标头来实现此目的 但是当我提交表单时 变量 id 为空 HTML 表单
  • 防止直接访问网站某些目录的最佳方法是什么?

    防止直接访问网站的某些目录的最佳方法是什么 1 创建并放置 htaccess我们要保护的每个目录中的文件并将下一行放入其中 Deny from all 2 创建并放置index php我们要保护的每个目录中的文件 并仅在其中放置下一行代码
  • 如何获取http重定向状态码

    我想记录 301 与 302 但找不到读取 Client Do Get doFollowingRedirects CheckRedirect 中的响应状态代码的方法 我必须自己实施重定向才能实现此目的吗 The http Client ht
  • htaccess 阻止访问 .php 并仅允许使用 RewriteRule

    我有一个带有这些重写规则的 htaccess 文件 RewriteEngine On RewriteRule login login php L RewriteRule index index php L RewriteRule page
  • 如何使用 .htaccess 提供 gzip 压缩字体? (没有 mod gzip 或 deflate)

    以下是我按随机顺序尝试过的内容列表 AddHandler application x httpd php otf AddType default mimetype auto prepend file otf php zlib output
  • 在 Elastic beanstalk 上配置 apache

    我正在 elastic beanstalk 上使用 django 进行开发 我想对 apache 配置进行两处更改 1 将 www domain com 重定向到 domain com 2 重定向http domain com http d
  • URL 重写破坏了 CSS 链接

    我使用以下设置进行网址重写 RewriteEngine On RewriteCond REQUEST FILENAME d RewriteCond REQUEST FILENAME f RewriteRule index php url 1
  • 如何用帖子标题 slug 重写 url?

    考虑一个网址 www example com paper ads details php req 43397 rnd 1308546000 我想将此网址更改为 www example com jobs in chanai php where
  • 将 HTML 作为 PHP 执行

    当我尝试将 PHP 嵌入到 HTML 文件中时 它不起作用 我编辑了 htaccess 以便将 HTML 文件视为 PHP 但是当我尝试访问 html 文件时 我的浏览器会下载它 而不是解析和显示它 编辑 我的 htaccess 内容 Ad
  • .htaccess 需要 WWW 域,但允许子域(如果存在且没有硬编码)

    我试图弄清楚如何设置一组 htaccess 规则 如果最初未指定 则强制在域前面出现 www 但同时 它不会如果存在子域 则有任何影响 所有这一切都无需对任何域名进行硬编码 以便脚本可以在不同的服务器和配置之间移植 EDIT 很抱歉我没能首
  • 使用 .htaccess 限制对文件下载的访问

    我下载了诸如product exe之类的静态文件 我想限制访问 这些文件带有 htaccess 文件 以便只有某些用户可以下载它 我认为这可以用 mod rewrite 来处理 我在网上找到了这个片段 使用引荐来源网址阻止不良网站 Rewr
  • Android WebViewClient url重定向(Android URL加载系统)

    我尝试使用以下方法拦截 webview 请求 ShouldInterceptRequest 里面我用了HttpUrlConnection为了从服务器获取数据 我将其设置为遵循重定向 这对 webviewclient 是透明的 这意味着当我返
  • 同时使用 POST 和 GET 的 HttpWebRequest

    我需要将用户重定向到http www someurl com id 2 http www someurl com id 2使用 POST 方法 是否可以 如果是 那么如何 现在我有以下内容 它正确转发 POST 数据 但它删除了 id 2
  • 网页配置。使用规则元素将所有流量重定向到 www.my...。

    我有一个 web config 文件 它自动将流量发送到 HTTPS 但是 如果有人进入 MyDomain com 那么它将转到https mydomain com https mydomain com如果有人输入 www mydomain
  • 如何使用 ASP classic 进行重定向

    我想从一个 URL 重定向到另一个 URL http female deals com http male deals com 如何通过在浏览器中将 URL 更改为新 URL 以及页面直接转到新 URL 而无需转到旧 URL 并进行刷新来实
  • 将子域重定向到新域

    大家好 尝试让 301 重定向正常工作但遇到了麻烦 我需要将 sub domain1 com 重定向到 www domain2 com 并确保所有文件名或参数都随之发送 这就是我正在尝试的 RewriteCond HTTP HOST dom
  • 重定向和引用者

    我的实际实现要复杂得多 需要身份验证和一堆其他东西 但以最简单的形式 这就是我遇到的问题 使用标头重定向不会将其自身显示为引用者 所以 假设我有三个页面 start php middle php 和 end php 启动 php a hre

随机推荐

  • 在 Moq 中模拟通用方法而不指定 T

    我有一个接口 其方法如下 public interface IRepo IA
  • Docker Compose 在 v2 中注入链接容器

    在 Docker Compose v1 中 etc hosts文件已使用链接的容器进行更新 例如 cat etc hosts 127 0 0 1 localhost 1 localhost ip6 localhost ip6 loopbac
  • 分布式版本控制系统真的没有集中存储库吗?

    这似乎是一个愚蠢的问题 但是如何在没有服务器可供检出的情况下设置工作目录呢 企业如何保存存储库的安全备份副本 我认为必须有一个中央仓库 但是它到底是如何 分布 的 我一直认为服务器 客户端 SVN 与点对点 GIT 的区别 但我不认为这是正
  • 单元测试 AuthorizationHandler

    我在 NET Core 2 1 中使用了基于资源的授权模式 如下所述 我唯一的问题是我不知道如何测试我的AuthorizationHandler干净地 这里有人已经做过类似的事情了吗 AuthorizationHandler示例 来自上面的
  • Postgresql 错误:必须出现在 GROUP BY 子句中或在聚合函数中使用

    在您将其标记为重复之前 我尝试了同一个网站上给出的几种解决方案 但没有一个起作用 My query SELECT temp fk settlements sku temp fk settlements order item id temp
  • PushManager订阅承诺从不履行也不拒绝

    我目前遇到一些 Chrome Chromium 版本的问题 其中PushManager subscribe来自 ServiceWorker 的承诺保持待处理状态 代码本身非常简单 return serviceWorkerRegistrati
  • Safari 中不显示边框图像

    边框图像未显示在 Safari 或平板电脑和移动设备上 在 FF IE Chrome 和 Opera 中都没有问题 这是 HTML div class col sm 4 ctas div class rooms img src images
  • C#在Excel文件中添加多个超链接的优化方式

    我想问是否有一些实用的方法可以使用 C 在 Excel 工作表中添加多个超链接 我想生成一个网站列表并锚定它们的超链接 以便用户可以单击此类超链接并访问该网站 到目前为止 我已经提供了简单的嵌套 for 语句 该语句循环遍历给定 Excel
  • 如何在 Vaadin Flow 的 FormLayout 中添加空格?

    例如 如果我有 2 列和 2 行的表单 但希望将第一个第一列中的第二列保留为空 如何在不添加空值 空跨度 的情况下执行此操作 field empty field field 现在我正在做 formLayout add new TextFie
  • OAuth 2.0 令牌对于提供商来说永远是唯一的吗?

    当 OAuth 2 0 提供商颁发令牌时 该令牌值对于提供商而言是否永远是唯一的 或者是否有可能在未来的某个时候 大概在令牌过期后 可能会为不同的用户发行具有相同值的另一个令牌 在搜索中 我发现了很多有关令牌过期的信息 但没有关于该令牌值将
  • Cmake 与 bitbake 配方

    我正在尝试用我自己的包构建 yocto 图像 我在 github 上有使用 cmake 的 OpenCV 代码 我试图为其编写一个食谱 但遇到了很多错误 任何人都可以提示我的食谱中应包含哪些功能或参数吗 我的食谱如下 DESCRIPTION
  • Struts2如何在页面之间导航时保​​留表单值?

    我的项目使用的是 struts2 spring3 请帮我解决这个问题 在我的应用程序中 a jsp 与 gt aAction java 相关 从主菜单 用户可以访问a jsp a jsp 中有很多字段 用户需要键入数据 在页面中间 用户需要
  • Cx_Freeze 找不到 pkg_resources/*.*'

    我正在尝试使用 cx Freeze setup py 文件和以下命令构建 EXE python setup py bdist msi 该命令的输出以以下内容结尾 正在从包 pkg resources 复制数据 错误 错误 3 系统 找不到指
  • 活动资​​源响应,如何获取它们

    我有一个活动资源 可以查询数据 它返回记录 计数 无论我要求什么 例如 product Product find 123 响应标头应该包含一个自定义属性 例如 HTTP PRODUCT COUNT 20 我想检查响应 IRB 执行此操作的最
  • InsertMany 在 mongodb 中不起作用

    我对 Mongoose 和 MongoDB 本身相当陌生 我试图保存一堆通过 insertMany 方法插入的文档 但它没有保存文档 这是我的代码 Model var mongoose require mongoose var Schema
  • 使用 IPv6 进行地理定位?

    我正在开发一个 IP 地理定位库 它使用 IPv4 地址的前三个八位字节来确定用户的国家 地区 城市 纬度 经度等 效果非常好 但它不处理 IPv6 地址 我希望它能够处理 有没有办法转换 IPv6 地址以获得 IPv4 地址的前三个八位字
  • 是否可以根据内容设置比例网格列?

    使用 Flexbox 或 CSS Grid 是否可以根据其中一列的内容来调整我的列的大小 这就是我想要的 我有 2 列 一个main and a side container main side
  • 在 Laravel 中合并两个数组值

    我想在 laravel 5 3 中合并两个数组 我有变量 type 返回 Illuminate Support Collection Object items protected gt Array 1 gt rinu 这是从查询中得到的 t
  • 找不到 PDF 标题:找不到“%PDF”

    当我尝试加载 pdf 时收到此日志 但不知道为什么 failed to find PDF header PDF not found 她是我的代码 void viewDidLoad webview loadRequest NSURLReque
  • 如何使用 .htaccess 将任何外部链接重定向到特定的 url 格式?

    我想重定向所有外部链接 即像这样的链接http www someothersite com anything在我的网站上 比如说http www example com to http www example com something 这