url重写会减慢代理的速度

时间:2009-11-01 23:31:11

标签: .htaccess proxy

我有一个代理脚本,它写了非常难看的长URL。代理脚本自动重写所有带有长丑陋URL的href链接

mysite.com/proxy.php?url=somesite.com
mysite.com/proxy.php?url=somesite.com/somedir
mysite.com/proxy.php?url=somesite.com/somedir/somepage.php

解决这个问题我做了两件事

  1. 编辑代理脚本以便所有 href链接被重写为

    mysite.com/somesite.com
    
  2. 在.htaccess中添加了重写规则,以便简短 网址现在重写......

    mysite.com/somesite.com

    RewriteCond%{REQUEST_FILENAME}!-f

    RewriteCond%{REQUEST_FILENAME}!-d

    RewriteRule ^(。*)$ proxy.php?url = $ 1 [L,QSA]

  3. 问题在于,每当我点击代理加载页面上的链接时,似乎比我完成所有这些整容工作需要更长的时间。我的重写规则有问题吗?

1 个答案:

答案 0 :(得分:3)

您编写的测试会进行两次文件测试(如果'not-file'和'not-dir'),如果它们为真,则会执行RewriteRule。此测试是针对 每个 请求完成的。即使结果只是需要HTTP 304(未修改)的响应,或者实际文件当前由Apache保存在内存中。

如果网站包含许多(服务器/客户端缓​​存)图像或其他资源,则可能会显着降低您的网站速度。要防止这种情况,请尝试过滤而无需访问文件系统。使用正则表达式尽可能过滤。最简单的方法是将URI路径部分更改为唯一的部分,例如example.com/u=somesite.com或甚至example.com/p/somesite.com(p代理))。

如果您需要做的只是正则表达式模式匹配而不是两个文件存在测试(example.com/p/somesite/etc/....的示例),您的测试将会快得多:

RewriteCond %{REQUEST_URI} ^/p/
RewriteRule ....

更新:扩展了一点并添加了小例子

PS:即使您不想更改当前的简短URI方案,也可以暂时使用此模式来测试它是否会更好地改变性能。