Apache重写规则(正则表达式)

时间:2010-07-17 11:52:52

标签: regex apache mod-rewrite

我正在使用apache,我需要重写类型为的URL:

  

/ A / B / C / d /边界/东西*

为:

  

/边界/为a_b_c_d /东西*

我需要将第一个Uri重写为第二种格式。

'/ boundary'之前的元素数量是可变的,我想用'_'替换元素之间的所有斜杠('/')

边界词总是一样的。

我相信我需要制定两个规则,一个用于斜线替换,另一个用于将边界更改为URL的开头:

我认为第二条规则是 ^ /(。*?)/ \ bboundary \ b / boundary / $ 1

是否有可能实现我想要的目标?!

如何?!

谢谢。

修改

我希望匹配到第一个边界词, 可以有一个像

这样的网址
  

/ A / B / C / d /边界/边界

修改

Gumbo感谢您的帮助

根据您的重写规则,我设法创建了一个。

1 个答案:

答案 0 :(得分:3)

请尝试以下规则:

RewriteRule ^/([^/]+)/(.+)/boundary/([^/]+)$ /$1_$2/boundary/$3 [N]
RewriteRule ^/([^/]+)/boundary/([^/]+)$ /boundary/$1/$2 [L]

小心使用 N 标志的第一个规则会导致内部重写而不增加内部计数器。所以很有可能你有无限的递归。


修改在您更改问题之后:

RewriteCond $1 !=boundary
RewriteCond $2 !=boundary
RewriteRule ^/([^/]+)/([^/]+)(/.*)?$ /$1_$2$3 [N]
RewriteRule ^/([^/]+)/boundary(/.*)$ /boundary/$1$2 [L]