一些问题的答疑

新手入门、经验交流

Moderator: cre

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

Re: 一些问题的答疑

Post by cre » Feb 08 2015, 15:49

点击的确实不发送#后的,location的#会返回到浏览器.
是的 浏览器不发送但接受.这个是我的错误.
经过url:的urlmatch 的$jump[实质上是location]处理后 服务器发送的#锚点会被删除
表现就是不会再有效.
不是"难怪我老说能用能用",而是确实可以用..而且location:的#lastpost也真实的去掉了....
在这里我要说:
Location规则去掉#lastpost,这个也能转用URL规则去掉?
开始想说,是的,能!
仔细测试,结论是,看情况.

我发现我回这些似乎根本不是你想知道的....写完看才发现,之前好像没明白你意图!问题是你给的例子就有问题....
而且一般情况下这种服务器都是用location的吧....


这个得看你说的转用URL规则是什么意思:
是内部headerURL: ?
还是url match?

location:头,是headermatch用.
这个无法用url match;



URL:头,是可以用别的方式的.
URL:头用urlmatch也是不可行的
但是,有别的实现.


针对你那个

Code: Select all

http://bbs.zb7.com/forum.php?mod=redirect&tid=498279&goto=lastpost
由于location不带http,所以直接$jump无效.

具体的:
2015-02-08_151006.png
2015-02-08_151006.png (39.18 KiB) Viewed 16906 times
可以捕获#
2015-02-08_151022.png
2015-02-08_151022.png (42.38 KiB) Viewed 16906 times
只捕获#前的
2015-02-08_153723.png
2015-02-08_153723.png (47.25 KiB) Viewed 16906 times

Code: Select all

[HTTP headers]
In = TRUE
Out = FALSE
Key = "URL: zb7"
Match = "$IHDR(Location:\1#)$ALERT(\1)"
Replace = "$JUMP(http://\h/\1)"
虽然,虽然看起来是何等的蛋疼 - -!!!
但是,但是啊! 确实是实现了URL:头替代Location:的捕获. ^o^ 只是这种用法 我是很汗的 - -!

我也晕....如果不是location的跳转,直接链接就是锚点...
就是说 一个链接 假设是

Code: Select all

<a href="http://bbs.zb7.com/thread-498279-1-1.html#lastpost">某帖子</a>
让你点击打开...

Web的文本替换大概是最好的办法

原因是 原地址不发送# 跳转的还是没# 无限重定向循环....
如果本来没有的需要添加#lastpost ,也只能在headerreplace添加....

#是浏览器决定的....用了两次跳转也避不过.

失败的规则如下,不用试验了,没用的
只要还是原地址,就没法折腾.就算后面加&也不行
$tst只在当前连接有效.

Code: Select all

[HTTP headers]
In = FALSE
Out = TRUE
Key = "Lo : zb7 www"
URL = "\1:proxhehe$SET(prox=\1)"
Replace = "$GET(prox)"

In = TRUE
Out = FALSE
Key = "Location: zb7 lo"
URL = "$OHDR(Lo:(\w)\1)$ALERT(\1) $JUMP(http://\1&proxJ)"

In = FALSE
Out = TRUE
Key = "URL:ZB7 zzz"
URL = "(^$OHDR(Lo :b))(bbs.zb7.com/forum.php?mod=viewthread)\0(\w)\1&(^*proxJ*) $JUMP(http://\0\1:proxhehe)"
之前的有跳转,找到特征,直接用跳转前的替换成跳转后的也是可以的....
只不过不是thread-498279-1-1.html 而是

Code: Select all

mod=viewthread&tid=498279
把mod=redirect换成viewthread,捕获tid就行了....
正常来说一般都能这么干.



这两个图本来是说可以,但是后来发现问题不对....
2015-02-08_134601.png
2015-02-08_134601.png (7.16 KiB) Viewed 16906 times
2015-02-08_134749.png
2015-02-08_134749.png (31.38 KiB) Viewed 16906 times
括号内是"子表达式".prox会考虑先满足子式.
后面没跟东西,没限制匹配到什么结束,那就匹配完了.问题是完了看看,后面当然是什么都木有了....后面跟个/,碰到/时候会去后面看看...不成就继续再第二个/....
具体回溯基本就是这样吧,没有资料只能从表现来推测.
这里是个坑 :cry:

白城哨站
Posts: 19
Joined: May 21 2014, 13:06

Re: 一些问题的答疑

Post by 白城哨站 » Feb 08 2015, 16:53

括号是真不知道有这个区别,以为括号仅是分组、捕获,有没有、在那里有对整个表达式没有影响。

今天才意识到你说的能用是指动态地址跳转到静态地址,而我从来没关注过这个,只看#lastpost有没有去掉。跳转那当然是一直没问题。\w那条规则也没有问题,#lastpost也没了。

我采用的就是web规则删除#lastpost。

关于#lastpost还有一个浏览器问题,Opera11.64对in Location里的#lastpost不处理,所以仅仅用web规则删除,保证点击链接不带#lastpost就没事了。那帖几个月后才发现IE、火狐还不行,还要搭配Location规则去掉in的#lastpost,不过因为只用Opera,不用Location规则也行,平常也不开。

User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: 一些问题的答疑

Post by cre » Feb 08 2015, 17:09

你重新看看吧....那会我是先写着帖子然后测试着改着,编辑着帖子....
有些是不对的,我已经修改了.你的问题和给的例子不搭,导致我写了N帖无用功....就因为你一直问,我一直回,但是双方都没领会精神....结果是我虽然费劲了,你也学到一点知识- -!
总之你没亏,我费力不讨好 TOT.
但是实际上你的要求,根本用不到这么多.
不用web删,因为dz的都是redirect,要跳转的和原地址有差别....
伪静态那个呢?反正我的要求是满足了.

白城哨站
Posts: 19
Joined: May 21 2014, 13:06

Re: 一些问题的答疑

Post by 白城哨站 » Feb 08 2015, 17:27

当时其实就一个问题,怎么去掉#lastpost,跳转虽然当时在规则里带了,但不是问跳转。
没白费劲,知道了网址、匹配、替换里http的不同处理,原以为都不带。昨天学到了set,回头就把规则合并了,原来第一页不带page和非第一页带page写了两条URL规则,还有一条删除#lastpost的Location规则后备。
但是我把\&挪到了括号里面,因为遇到了tid=1234567#lastpost这样的情况,后面没&
forum.php\?mod=viewthread\&tid=([0-9]+)\1(\&page=([0-9]+)\2|$SET(\2=1))
DZ的跳转是不一样,我遇到的是点击时的只有帖子号没页数,返回的Location才有,所以这条规则处理in Location,跳转和去除#lastpost一并做到了,也就是3条规则合一。

你之前说了AVG,以前也没注意过,后来才测试,发现*是最快的,[^xxx]+并不是最快。几个无需[^xxx]+的又都改回了*。

User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: 一些问题的答疑

Post by cre » Feb 08 2015, 17:55

你给个"点击时的只有帖子号没页数"的例子url. 那条规则我也是改过的,我没遇到什么问题,如果有问题就增补.

forum.php\?mod=viewthread\&tid=([0-9]+)\1(\&page=([0-9]+)\2|$SET(\2=1))

遇到tid=1234567#lastpost这样的情况,后面没&
没有关系!
后面如果跟的不是&page=数字,就直接把页设成1....我想可能是某个&tid=xxx&other=yyy&page=zzz 没做容错?
这个如果是这样我觉得倒是要看情况决定修改不修改.
毕竟我们看帖子首先得看page1.
只有帖子号没页数,返回的Location才有
有可能给的是lastpost的页号....如果是这样我自己用的肯定不会去修改.

(\w/)\0forum.php\?mod\=\w\&tid=\1\&(page=([0-9]+)\2|$SET(\2=1)) $JUMP(http://\0thread-\1-\2-1.html)
forum.php\?mod=viewthread\&tid=([0-9]+)\1(\&page=([0-9]+)\2|$SET(\2=1))

我和你写的不一样.tid捕获的就仅仅是数字,据我所知道的,这个有时候会有更多&xxx的,都是没用的....
只是我遇到的page都紧跟着tid...
如果真的有别的,你那就会错误.因为dz的伪静态是thread-tid-page-prevpage.html prevpage这个我就没见过除1以外的.
094950wwpb55j5bizqc8ix.png
094950wwpb55j5bizqc8ix.png (31.27 KiB) Viewed 16890 times

User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: 一些问题的答疑

Post by cre » Feb 08 2015, 18:20

*是最快的,[^xxx]+并不是最快。几个无需[^xxx]+的又都改回了*。
不是的.

完全的匹配最快,就是不用正则.

接着的是$nest.
nest中,直接在match用$NEST(<!--推广开始-->,<!--推广结束-->),这是最快的.但是美中不足的是nest的前面和后面不能一样.
就是说$NEST(<!--ad-->,<!--ad-->),没有任何作用.
bounds用nest,macth用*这是其次的.
(key|)比(key)+效率高.
[^/]+/这种应该比*效率高.最常用的就是[^>]+>和[^/]+/
<!--ad-->*<!--ad--> 这是再次的.

实际表现,我没测试,但经验是 [^/]+/比*好,[0-9]+非数字也很好
?++效率很差,非必要尽量不要使用.什么是必要,这个看下面的例子.
+比++效率高.
比如[^>]+>比[^>]++>效率高很多.
但是+只适合后面跟的和^的不一样的.
比如[0-9]+a 和[^/]+/

是因为[^/]+a [^/]+贪婪到/才停止,不看有没有a,不匹配!


?++必要的例子

Code: Select all

[Patterns]
Name = "dm5.com [13.07.24]"
Active = TRUE
URL = "[^.]+.dm5.com"
Limit = 2560
Match = "$NEST(<div ,id="fengxiang*,</div>)|"
        "<div id="xd">?++(^(^</body>))"
测试地址:进去按下键盘end键,在底部.

Code: Select all

http://dbug..www.dm5.com/m182115/
仔细观察,然后复制一条改成*看看有什么区别?

白城哨站
Posts: 19
Joined: May 21 2014, 13:06

Re: 一些问题的答疑

Post by 白城哨站 » Feb 08 2015, 19:18

可能我当时又弄错了,挪回了括号外也正常。

帖子号没页数只是点击的链接没有,服务器再给我返回一个带页数的Location。就是out的时候没有,in的时候有,所以把你的规则勾上in就行了。
就是这个样子,你的规则把跳转和去#lastpost一并办了
GET /forum.php?mod=redirect&tid=1808899&goto=lastpost
……
Location: forum.php?mod=viewthread&tid=1808899&page=4#lastpost

prevpage是不是这个10,昨天遇到的,不记得从哪点过去的了
http://bbs.zb7.com/thread-496086-2-10.html
http://bbs.zb7.com/thread-496086-1-10.html

我也是看了正则的贪婪与非贪婪,才把*尽量换成了[^xxx]+,[0-9]+也是那时候改的,之前都是*、\1。结果昨天一测结果是*更好
也许Proxomitron作者进行了优化?
$NEST是最快,开头*结尾次之。

?++到</body>之前,*一直到到文件尾,因为++向前看了(^(^</body>)),*只看字符不看位置。

(key|)比(key)+效率高.
(key|)是子表达式或。

白城哨站
Posts: 19
Joined: May 21 2014, 13:06

Re: 一些问题的答疑

Post by 白城哨站 » Feb 08 2015, 20:14

测了下$NEST,$NEST最快,开头*中间内容*结尾次之,$NEST+中间匹配最慢。
没有加边界限制,同一文本重复十次,测试多次取最快值。
$NEST(<tbody*>,</tbody>) 0.109
<tbody*jyaoxue*</tbody> 0.172
$NEST(<tbody*>,*jyaoxue*,</tbody>) 0.218

User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: 一些问题的答疑

Post by cre » Feb 09 2015, 05:41

帐不是这么算的.
按你这全1的 用\w最快.但实际应用中不可能有一堆几万个字符没空格.
如果只管匹配,*当然是最快的.毕竟不看是什么,只管匹配到limit.
作用域是不一样的.而且还有个问题你没遇到,那就是正则却不匹配的情况.
所以你的测试,基本没有实际应用意义.

2015-02-09_072020.png
2015-02-09_072020.png (21.45 KiB) Viewed 16840 times
2015-02-09_072121.png
2015-02-09_072121.png (21.92 KiB) Viewed 16840 times
2015-02-09_072139.png
2015-02-09_072139.png (14.33 KiB) Viewed 16840 times
2015-02-09_072451.png
2015-02-09_072451.png (22.4 KiB) Viewed 16840 times
前后确定时候,只匹配纯字符,*没有\w快.


*和别的不一样....
2015-02-09_054548.png
2015-02-09_054548.png (18.39 KiB) Viewed 16843 times
这样还怎么比?秒杀一切了.

*与其说是正则不如说是通配符
问题在于如果不需要限定,当然是用*.那种情况用什么基本都没有差别.一般是一样的时间.就算真有差0.05又如何?1秒是1000 慢1秒的两万分之一?而且基本不会差.
该用*时候我也是用*的.毕竟打起来也简单方便.

2015-02-09_053243.png
2015-02-09_053243.png (10.07 KiB) Viewed 16841 times
2015-02-09_053316.png
2015-02-09_053316.png (11.32 KiB) Viewed 16841 times
除了*,其他的都是处理奇葩状况的.

$NEST() 括号内*比[^>]+>要慢!
$NEST() 括号内 尽量不要用正则. 子式<(div|span)基本不影响速度
实际上$NEST(<div,</div>)和$NEST(<div*,</div>)用途是不同的.
这个跟script内输出有关.
这种"必要情况"下 <script*<\\+/script>比$NEST(<script*,</script>)更快.
将来你遇到再说吧.

User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: 一些问题的答疑

Post by cre » Feb 09 2015, 07:07

Code: Select all

[HTTP headers]
Out = TRUE
Key = "URL: DiscuzJump "
URL = "(\w/)\0forum.php\?mod\=\w\&tid=([0-9]+)\1(\&page=([0-9]+)\2|$SET(\2=1)) $JUMP(http://\0thread-\1-\2-1.html)"
最终的....我就这么用了.重定向的页其实不用导向也没事.你的可能需要用location:



下面的是废弃的

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)"
下面是之前的想法,仅供参考.有时候情况确实是千变万化的.
--------------------------------
我用的是拼音加加自定义词库- -!打(^(^))容易.[0-9]这种没法定义,实际环境差别大.
你应该根据自身情况考虑....

Code: Select all

v=a[pro.]
v=s[$...]
va=$SET()
va=$TST()
va=$GET()
vs=$NEST()
vs=$ALERT()
vs=$LOG(C)
fw=(^(^))
db=dbug..
db=dbug..bin..bout..
by=bypass..
bw=bweb..
bh=bin..bout..
bh=bin..
bh=bout..
bhi=bin..
bho=bout..
src=src..
local=LocalHost
local=Local.ptron
pro=proxomitron
pro=Pro
懒得开ps,用css排版重截图好了.
2015-02-09_070626.png
2015-02-09_070626.png (4.91 KiB) Viewed 16839 times

Post Reply