检查我当前的网址重写以加载图片:
// Possibiities: 1 letter char, followed by `=` then the value (numbers/letters)
// w= | h= | c= | q= | f=
IMG-bla/blue_w100.jpg >> imgcpu?src=bla/blue.jpg&w=100
IMG-bla/blue_cp.jpg >> imgcpu?src=bla/blue.jpg&c=p
IMG-bla/blue_h200.jpg >> imgcpu?src=bla/blue.jpg&h=200
IMG-bla/blue_w50_h200_fbw.jpg >> imgcpu?src=bla/blue.jpg&w=50&h=200&f=bw
基本上我想有一个终极重写网址,这让我可以自由地用任何属性重写下面的网址,而不必硬编码那个确切的重写顺序,每个可能性有一条规则:目前我的代码非常愚蠢,实用的&不完美的,思想确实有效!
// works but utterly unelegant and unpractical as well as incomplete:
RewriteRule ^IMG-(.+)_w(.+).jpg$ imgcpu\.php\?src=$1\.jpg&w=$2 [L]
RewriteRule ^IMG-(.+)_w(.+)_h(.+)_c(.+).jpg$ imgcpu\.php\?src=$1\.jpg&w=$2&h=$3&c=$4 [L]
RewriteRule ^IMG-(.+)_w(.+)_h(.+)_f(.+).jpg$ imgcpu\.php\?src=$1\.jpg&w=$2&h=$3&f=$4 [L]
现在,如何使用可选的属性资产重写此复杂规则?我正在搜索该规则以对其进行全部规则。你的想法&我们热烈欢迎您提出建议,并热情地赞助任何敢于解决这个复杂难题的事情!
答案 0 :(得分:1)
在达到这个非常普遍的解决方案之前,我考虑了几种方法。在这里,我多次重复相同的规则。这是一种分而治之的策略,每次执行规则时,它都会提取一个参数。
# Generic rule for extracting one parameter
RewriteRule ^(IMG-[a-z0-9]+/[a-z0-9]+)_([a-z0-9])([a-z0-9]+)([_.].*)$ $1$4?$2=$3 [NC,QSA]
RewriteRule ^(IMG-[a-z0-9]+/[a-z0-9]+)_([a-z0-9])([a-z0-9]+)([_.].*)$ $1$4?$2=$3 [NC,QSA]
RewriteRule ^(IMG-[a-z0-9]+/[a-z0-9]+)_([a-z0-9])([a-z0-9]+)([_.].*)$ $1$4?$2=$3 [NC,QSA]
RewriteRule ^(IMG-[a-z0-9]+/[a-z0-9]+)_([a-z0-9])([a-z0-9]+)([_.].*)$ $1$4?$2=$3 [NC,QSA]
RewriteRule ^(IMG-[a-z0-9]+/[a-z0-9]+)_([a-z0-9])([a-z0-9]+)([_.].*)$ $1$4?$2=$3 [NC,QSA]
RewriteRule ^(IMG-[a-z0-9]+/[a-z0-9]+)_([a-z0-9])([a-z0-9]+)([_.].*)$ $1$4?$2=$3 [NC,QSA]
RewriteRule ^(IMG-[a-z0-9]+/[a-z0-9]+)_([a-z0-9])([a-z0-9]+)([_.].*)$ $1$4?$2=$3 [NC,QSA]
RewriteRule ^(IMG-[a-z0-9]+/[a-z0-9]+)_([a-z0-9])([a-z0-9]+)([_.].*)$ $1$4?$2=$3 [NC,QSA]
# Final rule which does the actual rewrite
RewriteRule IMG-([a-z0-9]+/[a-z0-9]+\.jpg) /test/index.php?src=$1 [QSA]
让我们将D& C规则分解为更小的部分!
^(IMG-[a-z0-9]+/[a-z0-9]+)
此部分匹配但保留。这是结果中的$ 1。
_
单个下划线。这是匹配但丢弃的。
([a-z0-9])
匹配单个字母或数字(显然是在undorscore之后)。这是2美元,并假定为参数名称。
([a-z0-9]+)
匹配一个或多个字母或数字。这是结果中的$ 3,并假定为参数值。
([_.].*)$
匹配单个下划线或句点,以及其他所有内容,直到请求字符串的末尾。这是4美元。
因此,对于每个步骤,都会提取一个参数(如果存在匹配),然后在QSA的帮助下将其附加到查询字符串。剩下的请求,$ 1 $ 4捆绑在一起,为另一轮做好准备。冲洗并重复,直到我们超出参数或达到可用规则的最大数量。
最终规则与那时应该是路径和文件名匹配。 这些是步骤:
IMG-bla/blue_w50_h200_fbw.jpg -> IMG-bla/blue_h200_fbw.jpg?w=50 [with QSA]
IMG-bla/blue_h200_fbw.jpg -> IMG-bla/blue_fbw.jpg?h=200 [with QSA]
IMG-bla/blue_fbw.jpg -> IMG-bla/blue.jpg?f=bw [with QSA]
(不再有通用规则匹配)
IMG-bla/blue.jpg -> /test/index.php?src=bla/blue.jpg [with QSA]
追加查询字符串后的总计:
/test/index.php?src=bla/blue.jpg&f=bw&h=200&w=50
请注意,我做了一些假设...
告诉我你的想法。