我有一个代理脚本,它写了非常难看的长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
解决这个问题我做了两件事
编辑代理脚本以便所有 href链接被重写为
mysite.com/somesite.com
在.htaccess中添加了重写规则,以便简短 网址现在重写......
mysite.com/somesite.com
RewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteRule ^(。*)$ proxy.php?url = $ 1 [L,QSA]
问题在于,每当我点击代理加载页面上的链接时,似乎比我完成所有这些整容工作需要更长的时间。我的重写规则有问题吗?
答案 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方案,也可以暂时使用此模式来测试它是否会更好地改变性能。