如何使用.htaccess将任何外部链接重定向到特定的url格式?
我想重定向所有外部链接,即如何使用.htaccess将任何外部链接重定向到特定的url格式?,.htaccess,redirect,.htaccess,Redirect,我想重定向所有外部链接,即http://www.someothersite.com/anything在我的网站上(比如http://www.example.com)至http://www.example.com/something 这里我面临的问题是如何处理http://www.someothersite.com/anything因为它的值不是固定的。它可能来自任何不同的领域 首先,.htaccess配置一个HTTP服务器,用于处理传入请求、服务器上的资源请求,而不是外部请求。但由于您明确要求采
http://www.someothersite.com/anything
在我的网站上(比如http://www.example.com
)至http://www.example.com/something
这里我面临的问题是如何处理
http://www.someothersite.com/anything
因为它的值不是固定的。它可能来自任何不同的领域 首先,.htaccess
配置一个HTTP服务器,用于处理传入请求、服务器上的资源请求,而不是外部请求。但由于您明确要求采用.htaccess
方式重定向外部链接,我将概述三种方法:
.htaccess
和mod_substitute
将页面上的所有外部链接替换为固定的内部链接.htaccess
和mod\u 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"
这将阻止PHP将页面内容直接发送到浏览器,但会将所有内容写入内部缓冲区。在脚本结束时,将执行回调,并可能在将其发送到浏览器之前修改该缓冲区的内容
与.htaccess
方法相比的优势:对替换的控制更多。您可以使用preg\u replace\u 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);
})();
(函数(){
功能重定向链接(evt){
var matches=/^https?:\/\/([^\/]+)\//i.exec(this.href);
if(匹配项和匹配项[1]!=“www.yourdomain.com”){
window.location.href=http://www.yourdomain.com/your-fixed-link';
evt.preventDefault();
返回false;
}
}
var links=document.getElementsByTagName('a'),i;
对于(i=0;i
只需确保此代码放在所有链接之后(例如文档末尾),或在DOMContentLoaded
事件上执行即可
与.htaccess
方法相比的优势:与上述PHP方法相同
缺点:用户必须启用JavaScript,因此这不能保证始终有效。实际上,我认为目标是首先尝试阻止外部链接离开网站,据我所知,这是无法做到的。。。至少不是通过.htaccess。事实上,我的网站上有这些网站的链接。现在我想要的是,当用户点击该外部站点的链接时,我希望该用户被重定向到
http://www.example.com/something
(已修复)这就是我想要的@wheatbeak,您可能可以通过javascript实现,但不能通过.htaccess。不管服务器端设置如何,外部链接都将正常工作。注意:在javascript中执行此操作可能会对站点性能产生严重影响,尤其是当您有大量链接时。@RyanVincent OP表示如果他们的站点有指向您的域的链接,并且用户单击,他们根本不希望用户跟随链接,而是重定向。
(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);
})();