一些问题的答疑

新手入门、经验交流

Moderator: cre

Forum rules
  • 软件自带帮助是最好的入门教程,请仔细阅读;在您掌握最基本知识前,我们没法帮助您
  • 提问前请先查阅软件帮助文件和论坛相关讨论
  • 查阅软件帮助和论坛相关讨论即可解决的问题帖将直接删除,以免浪费他人时间
  • 请学会如何提问,尽量将问题描述清楚,不明确的提问将被直接删除
User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

一些问题的答疑

Post by cre »

白城哨站一些问题的答疑

帮助中说的“限制: 匹配表达式或替换文本部分”是指什么?

大概来说限制有好多 问题中文帮助的限制应该是 header的url部分和replace部分
我的私信回复因为没有上下文,所以是猜测的.后来看到了上下文,就在这修改了.


$JUMP为什么必须写在URL中?又看了帮助中$RDIR和$JUMP的介绍,还是没看出来哪句是。

你的眼睛没有问题 :) 并没有人说$jump()必须写在url.但是一般来说,也不需要写在别处.
就URL:SITES来说
你要明白 url:xxx 并没有这个header头.这是prox自己的东西.并不发到服务器交互.

你好好理解我下面说的:
header有 url match replace
url 不能写http://
match 必须有http://
replace 不限制,但是遵循定位


如果需要跳转两个网址,这个格式是对的 $前没有空格要求 怎么说呢 空格或者加上&$JUMP()这个基本是个习惯.不影响.

Code: Select all

[HTTP headers]
In = FALSE
Out = TRUE
Key = "URL:baidu"
URL = "www.(baidu|hao123).com $JUMP(http://tieba.baidu.com)"
注意 下面的效果是一样的!

Code: Select all

[HTTP headers]
In = FALSE
Out = TRUE
Key = "URL:baidu"
Match = "http://(www.baidu.com|www.hao123.com)"
Replace = "$JUMP(http://tieba.baidu.com)"
实现的是location:的重定向 就是301


看到$RDIR中说“新的 URL 必须是 Proxomitron 能够解析的类型 (http 或 https)。”这就是要有http的原因?

这个不能这么理解
$jump是一个命令函数 作用是重定向 接受的参数必须是网址格式 你自己试试就会发现
如果不加http:// 会是Location:原地址

Code: Select all

[HTTP headers]
In = FALSE
Out = TRUE
Key = "URL:baidu"
URL = "www.(baidu|hao123).com $JUMP(tieba.baidu.com)"

用www.baidu.com/123测试
会是Location: http://www.baidu.com/123

也许你觉得迷惑,这也不能说什么问题,你应该知道绝对地址和相对地址吧?
我来举几个例子你就明白了
2015-02-05_013803.png
2015-02-05_013803.png (8.46 KiB) Viewed 19769 times
2015-02-05_013855.png
2015-02-05_013855.png (33.19 KiB) Viewed 19769 times
2015-02-05_013943.png
2015-02-05_013943.png (3.96 KiB) Viewed 19769 times
加上http就直接到126.com啦.
User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

关于nest和inest

Post by cre »

关于nest和inest

$nest 限定了前后成对出现
$inest 限定了开头找结尾
一般区别不大,但特殊情况下就有区别了.
具体的说不太清楚.需要有特殊的例子才能解释,问题是这个的例子不常见.而且一般也能用增加限制的方法规避.
nest.png
nest.png (24.88 KiB) Viewed 19768 times
inest.png
inest.png (25.76 KiB) Viewed 19768 times
User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

$SETPROXY到底该写在哪里?

Post by cre »

$SETPROXY到底该写在哪里?这是一个问题.

看看帮助怎么说的

Code: Select all

$SETPROXY(remote.proxy.name[:port])
Restrictions: Match or replace
Filter Types: OUT header filters only
The $SETPROXY command will force a connection to use a particular proxy. It overrides both the "Use remote proxy" checkbox and the current proxy chosen in the proxy selector. It's useful for insuring a particular proxy is used in a given situation or with a particular URL. 

The proxy to set must be one already entered into the External Proxy Selector list. This command simply looks up and sets a proxy from that list. It's usually only necessary type the first part of the proxy name - the first proxy matched in the list will be use. The partial match must be exact though (no wildcards). 

Like the previous command this command must be also called in either the match or replace of an *outgoing* header filter.


必须写在out header,这个容易理解.
Restrictions: Match or replace
这个match到底是什么呢?

不使用header 头:,直接在url match使用:
无标识 url match
无标识 url match
ump.png (50.87 KiB) Viewed 19766 times
成功.

不使用header 头:,直接在header replace使用:
无标识 header replace
无标识 header replace
umr.png (46.64 KiB) Viewed 19766 times
成功.

不使用header 头:,直接在header match使用:
无标识 header match
无标识 header match
umph.png (51.54 KiB) Viewed 19766 times
失败!

使用URL: header 头:直接在header match使用:
有URL:标识 header match
有URL:标识 header match
umuh.png (46.19 KiB) Viewed 19766 times
成功!



使用URL: header 头:直接在url match使用:
有URL:标识 url match
有URL:标识 url match
umu.png (46.22 KiB) Viewed 19765 times
当然成功

使用URL: header 头:直接在header replace使用:
有URL:标识 header replace
有URL:标识 header replace
umur.png (44.66 KiB) Viewed 19765 times
当然成功

后两个图其实都不用截的....

那么 实际不使用header标识头,直接在url使用$SETPROXY会怎样?
没有就是全部!
没有就是全部!
null=all.png (47.49 KiB) Viewed 19765 times
全部都经过代理了 呵呵

结论是 :D
非url: 只能url match和header replace;
头url: url match 和 header match 及 header repalce 都 可以.

就是说 header的out, url扔个$lst直接跟$setproxy就可以用.
proxomitron的使用不能迷信权威,更不能臆测.要自己test才能真正知道呢.
白城哨站
Posts: 19
Joined: May 21 2014, 13:06

Re: 一些问题的答疑

Post by 白城哨站 »

感谢解答!

还有几个问题:

1.例子里URL的http://是不是多了?

2.“遵循定位”什么意思?

3.我没能重现重定向到http://www.baidu.com/www.126.com的错误情况,不知道哪里错了?
录制了一个GIF动图
1.gif
1.gif (313.05 KiB) Viewed 19716 times
4.没试成功改写为$JUMP
[HTTP headers]
In = TRUE
Out = FALSE
Key = "Location:#lastpost"
Match = "\0#lastpost"
Replace = "\0"

测试地址:
http://bbs.zb7.com/forum.php?mod=redire ... o=lastpost

在什么都不做的情况下,会跳转到:
http://bbs.zb7.com/forum.php?mod=viewth ... 9#lastpost

我希望把#lastpost去掉,不然总是默认看最后一楼。但看Proxomitron的日志发现,服务器进来一个带#lastpost的链接。
2.png
2.png (7.34 KiB) Viewed 19716 times
User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: 一些问题的答疑

Post by cre »

1.是的 是手误.我已经修改了. 是复制你的改的 这也不太重要 你理解就好 :D
2.HTML相对路径与绝对路径
3.重定向用的是Location:的header头
所以要匹配啊.
说的简单点,那测试例子就是"match发送跳转的url并replace"..
你看我用的url是什么?
www.baidu.com/000000
会返回一个错误的跳转 测试样例是捕获这个错误
你的错误就是: 环境不对,选的网址没有location:头 ;)
4.你这个鬼问题....我早说 原规则你导入用就行.而且也解释过了,不捕获#...
这个又得几张图说

看图:
Location 未必要求http!prox的match用\1,既不是捕获http,也不是不捕获http.上面说的match必须有http是针对URL:这个header内部头而言的.
2015-02-07_094643.png
2015-02-07_094643.png (5.78 KiB) Viewed 19703 times
使用已经跳转过的网址来折腾:
url部分的\1,不管你怎么弄 都"不捕获#"
2015-02-07_095338.png
2015-02-07_095338.png (41.82 KiB) Viewed 19703 times
直接match使用\1,如果没有replace,\1就是空,相当于没有匹配任何,相当于match全空,也相当于就是*
2015-02-07_095608.png
2015-02-07_095608.png (48.43 KiB) Viewed 19703 times
换个方式,match使用(\w)\1 (?++(^?))\1 可以捕获完整的
2015-02-07_095524.png
2015-02-07_095524.png (49.42 KiB) Viewed 19703 times
2015-02-07_095640.png
2015-02-07_095640.png (48.67 KiB) Viewed 19703 times
User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: 一些问题的答疑

Post by cre »

都不想跟你动口了,我想动手 :D

Code: Select all

[HTTP headers]
In = FALSE
Out = TRUE
Key = "New-HTTP-header: discuz jump test"
URL = "www.discuz.net/forum.php?mod=viewthread\&tid=\1\&page=([0-9]+)\2 $JUMP(http://www.discuz.net/thread-\1-\2-1.html)"
这是我原来回复的第一个规则,工作很正常.

Code: Select all

http://dbug..www.discuz.net/forum.php?mod=viewthread&tid=3157063&page=4#lastpost
用这个网址看,就是没了lastpost!而且跳转到了

Code: Select all

http://www.discuz.net/thread-3157063-4-1.html

Code: Select all

[HTTP headers]
In = FALSE
Out = TRUE
Key = "URL: DiscuzJump "
URL = "(\w/)\0forum.php\?mod\=\w\&tid=\1\&(page=([0-9]+)\2|$SET(\2=1)) $JUMP(http://\0thread-\1-\2-1.html)"
这是我自己用的 DZ论坛mod有viewthread和redirect page有的有有的没..
mod\=\w容错viewthread和redirect
\&(page=([0-9]+)\2|$SET(\2=1))容错没有提供页的
你可以自己开debug..试试

第一个(\w/)\0forum是必须的
不能写成(\w)\0/forum!
(\w)\0/forum中的\w会贪婪匹配到结尾,结果就是规则不匹配.
不用[^/]+/是因为 遇到

Code: Select all

bbs.zb7.com/bbs/forum.php?mod=redirect&tid=498279&goto=lastpost
就会歇菜!
白城哨站
Posts: 19
Joined: May 21 2014, 13:06

Re: 一些问题的答疑

Post by 白城哨站 »

前面都测试成功了,和图示一样。最后一个测试网址末尾应该不包括#lastpost吧?我是点击链接测试的,浏览器不是不发送#lastpost吗,所以最后#lastpost仍然带着,但是这和Proxomitron无关。

还有一个问题,\w我试了不要括号的写法,结果如图,难道\w在括号里表现为贪婪,括号外则是非贪婪?
0.png
0.png (34 KiB) Viewed 19694 times
我这32位Win7的IE10,dbug怎么不能用?
上面是Opera的,下面是IE10的,检查IE代理设置是Proxomitron,正常使用也跳了,但dbug就这样了
dbug.png
dbug.png (24.7 KiB) Viewed 19694 times
User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: 一些问题的答疑

Post by cre »

最后一个测试网址末尾应该不包括#lastpost吧
不包括.
我写的用途是把&tid...换成/thread-tid-page-1.html的静态化.只是也正好能满足你的要求而已!

Code: Select all

DZ论坛mod有viewthread和redirect page有的有有的没..
mod\=\w容错viewthread和redirect
\&(page=([0-9]+)\2|$SET(\2=1))容错没有提供页的
歇菜,那是给你说,有些论坛不在根目录,在bbs下用[^/]+/只能匹配到根域名而不是直到forum.php

Code: Select all

bbs.zb7.com/forum.php
bbs.zb7.com/bbs/forum.php
[^/]+/forum
第一个正常;
第二个[^/]+/匹配bbs.zb7.com/,后面跟的是bbs,不是forum,规则不匹配!


浏览器不是不发送#lastpost吗
是的...但是服务器可能会用Location:头发送#lastpost.

Location:头的#lastpost可以修改
经过proxomitron的url match,#后的截断!
经过proxomitron的header match,#可以捕获!


难道\w在括号里表现为贪婪,括号外则是非贪婪?
嘿,你怎么会总结出这么奇葩的结论?

Code: Select all

第一个(\w/)\0forum是必须的
不能写成(\w)\0/forum!
(\w)\0/forum中的\w会贪婪匹配到结尾,结果就是规则不匹配.
\w/和\w/forum是一样的!
(\w)\0 和(\w/)\0 难道在你眼里是一样的?
你自己不能在帮助搜索下\w?当然搜索了你看着也可能觉得不能解决问题,可我原写的备注是干嘛的?难道是误导你往奇葩方面想?

\w是特殊的,后面跟着东西会向后看,不跟东西就是贪婪,遇到空格和>就会停止.
url中没有空格也没有>,当作*就对了.

Code: Select all

\w   Backslash-w: Word match. Will match any number of non-space characters. it's basically the opposite of "\s", but in some ways it's also similar to "*". The difference being it will stop if it hits a space or a ">" (which marks the end of a HTML tag). It comes in very handy when matching tag values and URLs (See {tips and tricks})

IE10,dbug怎么不能用
ie8就不能用dbug..命令了,chrome也不行.
ie6,opera,firefox可以用.

点击log window,edit菜单下的html debug info勾上,就是debug.



我想问问你 我复制一遍我的原话你是不是就看懂了?为什么之前你看不懂?为什么经常这样呢?
你这些疑问我开帖子是因为我觉得都是header相关的,整理下容易看.
接着你这不认真看的问题就又出现,我都不知道该怎么对待.把你我说的都删了我再整理整理?这个工作量太大了....我懒啊.

就那个gif来说,你手打一遍location:liantong 这有点搞笑啊.连大小写和空格你都没漏呢.

Code: Select all

[HTTP headers]
In = TRUE
Out = FALSE
Key = "Location: LianTong (In)"
Match = "http://[0-9.]+/proxy?$FILTER(True)$SET(LT302=T)"
我原规则是禁止联通的isp遇到一些域名会错误重定向!懒得打字我就直接在那条改了....这有个web的条目去配合的.
你这个写的我都想笑.你的location是百度跟liantong有什么关系?
可我图上有url,有写字,你就不看.专门看奇葩的地方.你这心理很有意思呀.
你把整个这个帖子全部的一字一字再看一遍.
User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: 一些问题的答疑

Post by cre »

我全部又看了一遍,修正了帖子内一个因为bbcode转码导致的网址变url问题.
顺便一提,LogWindow也会显示结果的.
2015-02-08_024933.png
2015-02-08_024933.png (60.63 KiB) Viewed 19660 times
白城哨站
Posts: 19
Joined: May 21 2014, 13:06

Re: 一些问题的答疑

Post by 白城哨站 »

上一贴我问的就不是网址转换,这个不是问题,要的是把#lastpost去掉,难怪你总是说能用。

如果我点击的链接就带#lastpost,能去掉?
我点击的链接不带#lastpost,但服务器返回的Location中又带了#lastpost(4楼最后一图),所以私信里有个Location规则去掉#lastpost,这个能转用URL规则去掉?

我发上一贴时还不知道#跟网址的关系,得phoenix解答又在网上看的,浏览器不发送#,不对?

http://www.ruanyifeng.com/blog/2011/03/url_hash.html
二、HTTP请求不包括#
#是用来指导浏览器动作的,对服务器端完全无用。所以,HTTP请求中不包括#。
比如,访问下面的网址,
http://www.example.com/index.html#print
浏览器实际发出的请求是这样的:
GET /index.html HTTP/1.1
Host: http://www.example.com
可以看到,只是请求index.html,根本没有"#print"的部分。

我问的是规则不变,仅仅是加不加括号表现不一样,是否在满足括号里的要求之前,不看括号外的?加了括号不仅仅是分组、捕获还有别的影响?
\w/forum.php\?mod\=\w\&tid=\1\&(page=([0-9]+)\2|$SET(\2=1))
(\w)/forum.php\?mod\=\w\&tid=\1\&(page=([0-9]+)\2|$SET(\2=1))


我怕你不知道说哪个规则,原文打上方便提示,总不成给我单独服务吧?还想多了。
Post Reply