新足迹

 找回密码
 注册

精华好帖回顾

· 漫漫改造装修路 (2013-7-28) anata_t · 小儿女记事系列8--小花朵断奶记 (2009-9-1) 清凉
· 三试土炮SSV/Redline__周日提车。 (2015-5-23) evereve · Settle 之前的 Final Inspection 总结, 中和各家之长,希望对大家有所帮助!! (2009-8-15) oceangoing
Advertisement
Advertisement
查看: 1420|回复: 9

关于url 重写,请教大家。 [复制链接]

发表于 2013-12-31 17:20 |显示全部楼层
此文章由 eric_gao 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 eric_gao 所有!转贴必须注明作者、出处和本声明,并保持内容完整
大家好,门外汉又来求帮忙了

我想做一个网站relay, 实现 如果用户访问
http://a.com.au/?path=http:/b.com.au/   
那么请求由a.com.au 发起,抓取path后面的变量,然后用curl 发起一个http 请求。  目前 b.com.au  的首页也能正常显示出来。

如果在页面 b.com.au/  下有个其他页面(/test1/test2/a.htm),   如果把鼠标停在上面, 能看到 默认 指向了  http://a.com.au/test1/test2/a.htm
点击访问肯定出错,  因为页面是在 b.com.au 上, 不在 a.com.au 上。

如果我手工把地址栏的url 改成 http://a.com.au/?path=http://b.com.au/test1/test2/a.htm   页面能正常显示。

请问大家,如何能把上面的url  (http://a.com.au/test1/test2/a.htm)  
自动重定向到  (http://a.com.au/?path=http://b.com.au/test1/test2/a.htm )

最好是鼠标停在a.htm 页面上的时候,  跳转url  已经自动指向 (http://a.com.au/?path=http://b.com.au/test1/test2/a.htm ) 而不是 (http://a.com.au/test1/test2/a.htm )

Sunday Afternoons UPF50+防晒帽专卖
oursteps.com.au/bbs/forum.php?mod=viewthread&tid=934220
Advertisement
Advertisement

发表于 2013-12-31 17:42 |显示全部楼层
此文章由 pretty 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 pretty 所有!转贴必须注明作者、出处和本声明,并保持内容完整
帮顶,今天是2013最后一天,注意休息哦

发表于 2013-12-31 17:57 |显示全部楼层
此文章由 asif 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 asif 所有!转贴必须注明作者、出处和本声明,并保持内容完整
用apache的rewrite就可以做了吧,也许还要加上reverse proxy。还有html链接不要用域名。

发表于 2013-12-31 19:56 |显示全部楼层
此文章由 windix 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 windix 所有!转贴必须注明作者、出处和本声明,并保持内容完整
你是用PHP吗? 给你提供点思路,你去搜 "php web proxy" 和你要实现的东西是一模一样的
简单的比如这个: https://github.com/joshdick/miniproxy

发表于 2013-12-31 20:41 |显示全部楼层
此文章由 eric_gao 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 eric_gao 所有!转贴必须注明作者、出处和本声明,并保持内容完整
谢谢楼上几位的宝贵留言。

一开始也想过这些开源的proxy,但是对页面支持都不是太好,个别时候子页面也直接把client ip都直接暴露出来了。

因为只要实现个人的一些小用处,还是准备用简单的几行php然后直接调curl, 而且都是get,应该不难实现。

还是用htaccess 的rewite,表达式匹配正慢慢调呢,刚才不小心还rewrite个loop出来,见笑了。
Sunday Afternoons UPF50+防晒帽专卖
oursteps.com.au/bbs/forum.php?mod=viewthread&tid=934220

发表于 2013-12-31 22:24 |显示全部楼层
此文章由 eric_gao 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 eric_gao 所有!转贴必须注明作者、出处和本声明,并保持内容完整
还是得请教大家,就是想把
http://a.com.au/test1/test2/a.htm
转成
http://a.com.au/?path=http://b.com.au/test1/test2/a.htm

也就是
http://a.com.au/*
转成
http://a.com.au/?path=http://b.com.au/*

就这么几行,怎么写也不对, 大家帮忙看看
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST}  ^a\.com\.au$ [NC]    #主机是a.com.au 的
RewriteCond %{QUERY_STRING}  ^$                        # 查询字符串为空,没有查询串
RewriteRule ^$ http://a.com.au/?path=http://b.com.au/$1 [R=301,NE,NC,L]     # 直接就换了。

怎么就不行呢。
Sunday Afternoons UPF50+防晒帽专卖
oursteps.com.au/bbs/forum.php?mod=viewthread&tid=934220
Advertisement
Advertisement

发表于 2014-1-3 17:06 |显示全部楼层
此文章由 angest 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 angest 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我做Java的,对PHP的实现细节不清楚,不过这里有思路应该就够了。大体上有以下几个方向的方法:
方法1:如楼主所想,通过正则表达式替换HTTP响应内容。但是你应该想到,这个方法在复杂页面中,有一定的出错几率。比如无法处理通过Javascript打开的请求,或者对于非链接内容的误替换,等等。如果页面比较简单,而且对出错有一定的容忍,这个方法还是很不错的。
方法2:在代理代码中判断path值,如果不是以http://开头,则获取该请求的referer并得到真正的绝对地址,再以这个值作为参数重定向。这个方法优点是适应性比较强,不会出现方法1的问题。但缺点是没有实现最后一句话(用于右键点链接再复制地址基本无用),另外referer过于依赖客户端,并不是特别可靠。

发表于 2014-1-6 13:07 |显示全部楼层
此文章由 鱼羊鲜 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 鱼羊鲜 所有!转贴必须注明作者、出处和本声明,并保持内容完整
看的晕晕的

发表于 2014-1-6 15:15 |显示全部楼层
此文章由 鱼羊鲜 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 鱼羊鲜 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 鱼羊鲜 于 2014-1-6 15:18 编辑

这段代码是好的

可以把
http://localhost/a/b/c.htm 跳转到
http://localhost/?path=http://domain.com.au/a/b/c.htm

RewriteEngine On
RewriteRule ^(.+)$ /?path=http://domain.com.au/$1 [R=301,L]

发表于 2014-1-6 15:44 |显示全部楼层
此文章由 eric_gao 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 eric_gao 所有!转贴必须注明作者、出处和本声明,并保持内容完整
谢谢楼上几位的回复。

我也是一根筋了,其实没这么费事, 我把curl抓回来的结果检查一下,把url跳转做下替换,塞入我想要的那些前缀就可以了, 这样一举两得了, url正确重写了,而且跳转url都自动修改了, 如果把鼠标放在页面上, status bar上的url也自动修改好了。
Sunday Afternoons UPF50+防晒帽专卖
oursteps.com.au/bbs/forum.php?mod=viewthread&tid=934220

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部