有一个很长的.htaccess文件可以吗?

Adi*_*M P 10 php performance .htaccess mod-rewrite

我正在向网站上的人们发送网址,这实际上指的是丑陋的东西(在同一个网站上).

http://www.mydomain.com/cool-URL
实际上指的是
http://www.mydomain.com/boring.php?id=478547&sessid=34734asdf7&otherboringdetails

我打算通过在需要时修改.htaccess文件来实现这一点.我将使PHP脚本写入.htaccess文件,每当有新的url分发时添加一个新的重写规则(来自非程序员可以控制的管理区域[指定此URL的标题]新条目,管理员:它将自动分配]).

这会成为一个问题吗,特别是在大约1000个这样的URL之后?可接受的实际数字是多少?因为,我可以想象一下:服务器接收到URL的请求,然后它在.htaccess文件中搜索该URL的右页,最后将用户发送到右页.如果这与数据库搜索类似,那么用户可能需要很长时间才能真正进入正确的页面...

有关于此的任何指示,好吗?

sha*_*mar 20

不,它不行,会妨碍您的页面加载速度.

.htaccess文件在每个服务器请求上进行评估.即使是静态图像,CSS和JS文件.因此,您要求网络服务器在执行请求时解析1000多条可能的REGEX行.

此外,还会为驻留在子目录中的文件处理父目录的.htaccess文件.因此,如果你的大型.htaccess位于网站的根目录中,那么它也将被处理为子目录中的文件所做的所有请求(以及子目录中的.htaccess文件).

我朋友的处理很多.如果您有一个包含10个图像的页面(例如),则会获得11次进程.并且文件中的处理越多,则所需的周期越多.所以是的,htaccess文件中的任何内容都会产生影响.现在这种影响是否明显?很难说它什么时候成为一个问题.但它必须非常大,因为处理相对简单,在你的情况下.

使用htaccess文件的关键是让它变得聪明.您不希望列出200个条目.只需几行就可以实现智能(如果你想使用htaccess).


Mar*_*wis 5

我会执行一个简单的测试:使用随机URL生成一个大的.htaccess文件,并自己测量结果性能.

import random,string

def rand_string():
    length = random.randint(4,10)
    res = []
    for i in range(length):
        res.append(random.choice(string.letters))
    return ''.join(res)

for i in range(1000):
    print "RewriteRule %s http://www.mydomain.com/boring.php?%s [R]" % \
     (rand_string(), rand_string())
Run Code Online (Sandbox Code Playgroud)


Gum*_*mbo 5

拥有那么多规则是不可取的.并不是说它们位于.htaccess文件中,或者它们是针对每个请求进行测试的.(根据配置,如果将它们放入服务器或虚拟主机配置中,也可能会发生这种情况.)

这是一个事实,即大量的规则经过测试,并且根据规则,每个规则都必须经过测试,直到找到匹配为止.

那么,你可以通过按照匹配概率的顺序排列规则来抵消这种情况,这样早期找到匹配的概率很高.但在最坏的情况下,它的复杂性仍然是O(n).

如果确实需要那么多映射并且映射已修复,则可以使用复杂度为O(1)而不是O(n)的RewriteMap哈希文件来处理分离的规则.或者您将映射转移到PHP应用程序并在那里执行.