使用.htaccess RewriteRule的长列表,或者在PHP中使用单个catchall和direct


Use long list of .htaccess RewriteRule or use a single catchall and direct in PHP?

说im使用.htaccess文件来获得外观整洁的链接,但我有一长串(比如20个)RewriteRules来做类似的事情

domain.com/user/adam --> domain.com/user.php?need=user&user=adam
domain.com/test.js --> domain.com/index.php?need=code&file=test.js
domain.com/test.js/edit --> domain.com/index.php?need=code&file=test.js&action=edit

在PHP中使用catch-all RewriteRule并在斜杠/解析和direct上进行拆分更好吗?还是"重写规则"的长列表更好?

更好,我想我的意思是更快,更健壮。我知道有了全包,保养会更好。

此外,你能推荐一篇php类的例子/文章来做这件事吗?

如果这回答了您的问题,那么使用大量重写规则列表是没有问题的。我看到重写规则填满了我的整个监视器,然后还有一些——除非你有问题,否则一个庞大的列表是没有问题的。

您可能想看看ZendRouter——即使您没有使用框架,您也可能想遵循他们的想法。

http://framework.zend.com/manual/en/zend.controller.router.html

本质上,.htaccess将所有请求路由到index.php文件,但与RegEx:匹配的请求除外

RewriteRule !'.(js|ico|gif|jpg|png|css|html)$ index.php

或者任何非文件/目录(尽管我认为检查文件/目录是否存在的成本略高,而不是regex所请求的URL)

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

一旦您利用了这种类型的路由,您就可以为URL定义一个标准正则表达式,以映射到控制器/操作