优化htaccess重写

时间:2019-02-17 10:22:01

标签: .htaccess

我有一个大约200行的htaccess文件,该htaccess主要包含重写规则。该文件本身很好用。

但是我想知道是否有更快的方法来重写此附加规则:

RewriteRule "^order/new/(.+)$" "extention.php?sale&subroute=order&route=new&cid=$1" [QSA,L]
RewriteRule "^order/view/(.+)$" "extention.php?sale&route=view&subroute=order&id=$1" [QSA,L]
RewriteRule "^order/edit/(.+)$" "extention.php?sale&route=edit&subroute=order&id=$1" [QSA,L]
RewriteRule "^order/copy/(.+)$" "extention.php?sale&route=copy&subroute=order&id=$1" [QSA,L]

是否可以将所有这些行归为一类?

例如:类似

RewriteRule "^order/{copy|view|new|edit}/(.+)$" "extention.php?route=$1 &subroute=order&id=$2" [QSA,L]

1 个答案:

答案 0 :(得分:0)

如果您担心速度,请将所有配置移入vhost配置文件并禁用.htaccess文件。当前,每次收到请求时,Apache都会读取您的.htaccess文件。虚拟主机配置在启动时会被读取一次,并且规则会保留在内存中,从而加快了规则的处理速度。

关于眼前的问题,您可以使用另一个捕获组来组合这4条规则。捕获组用()括号包围,而不用大括号括起来。您最终将获得如下规则:

RewriteRule ^order/(new|view|edit|copy)/(.+)$ extention.php?sale&route=$1&subroute=order&id=$2 [QSA,L]

或更一般的:

RewriteRule ^([^/]+)/([^/]+)/(.+)$ extention.php?sale&route=$2&subroute=$1&id=$3 [QSA,L]