2011-03-18 46 views
3

我们正在建立一个网站,希望每天能够服务2k-5k的独特用户。 因为该网站是面向阿拉伯喇叭我们配置的.htaccess文件 做重写规则,如:600 +模式重写规则,用apache可以吗?

RewriteRule ^عربية$ arabic.php [L] 

问题是,我们有600条重写规则类似上面。 这是好的与Apache?或者这是否会让我的服务器真的很慢? [L]标签有帮助吗?

+3

请记住,Apache需要解析每个请求的.htaccess。你应该将重写规则移动到你的VirtualHost配置文件(通常在httpd.conf中),它只能被解析一次:当apache启动时。 – Maerlyn 2011-03-18 08:05:47

+0

[你以前的问题](http://stackoverflow.com/questions/5302133/htaccess-rules-efficent-way)? – Gumbo 2011-03-18 08:10:48

+0

@Gumbo它缩放比例从40到600 :) – Tom 2011-03-18 08:11:38

回答

7

如果您只是静态关键字,我宁愿使用hash map而不是单独的规则。因为散列映射的查找操作的复杂性与O(n)相反,因此对于n规则而言是O(1)。

所以你可以做这样的事情:

RewriteMap arabic-keywords dbm:/path/to/file/arabic-keywords.map 

最初的关键字地图格式的纯文本文件:

عربية arabic.php 
الأغاني songs.php 
الفنان artist.php 

然后使用httxt2dbm打开纯文本文件转换成哈希映射:

httxt2dbm -i arabic-keywords.txt -o arabic-keywords.map 

并且使用该地图:

RewriteCond %{arabic-keywords:$0} .+ 
RewriteRule .+ %0 [L] 

作为散列重写映射返回一个空字符串,如果没有找到匹配,条件将只会被满足,如果发现匹配。但请注意,RewriteMap不能用于.htaccess文件context

+0

你已经知道我的问题现在就放弃了,我需要选择has map或httpd.conf方式。你最后的决定是什么? :) – Tom 2011-03-18 08:21:18

+1

@Tom:如果它不是最优的,我不会推荐哈希映射。 – Gumbo 2011-03-18 08:24:37

+0

谢谢Gumbo另一个深刻的答案! – Tom 2011-03-18 08:27:54

0

我正在维护一个具有类似vistor费率的网站,目前大约有500条mod重写规则。他们对整体表现影响不大。

[L]标签确实对此性能有所帮助。尤其是如果您将最常用的规则保留在页面顶部。

+0

很高兴听到有同样问题的人。 @ pinusngra否则说,有人可以添加另一种意见? – Tom 2011-03-18 08:16:23

+0

嗯,我同意@pinusnegra可以实现更高效的工作。只要指出这不一定是主要瓶颈。 – gnur 2011-03-18 08:19:48

1

我认为这对性能和可维护性来说太过分了。

我会做一个重写规则来将所有相关请求转发到arabic.php,然后使用php处理$ _SERVER ['REQUEST_URI']以获得更多动态路由。

这会更易于维护。

+0

这就是维基百科的神奇之处,但我们的网站不是可扩展的,但感谢您的2美分朋友。 – Tom 2011-03-18 08:22:51