2010-07-17 129 views
0

我使用的Apache和我需要重写类型的URL:阿帕奇重写规则(正则表达式)

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

到:

/边界/为a_b_c_d /东西*

我需要的第一个URI改写为第二格式。

元件之前“/边界”的数量是可变的,我想通过更换元件之间的所有斜线(“/”)“_”

边界字始终是相同的。

我认为我需要做的让两个规则,一个斜线替换和另一个改变边界的URL的开头:(。*?)

第二条规则,我认为是一样的东西^// \ bboundary \ b/boundary/$ 1

是否有可能实现我想要的功能?

怎么样?

谢谢。

编辑

我想匹配,直到第一边界字, 它可能有像

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

一个网址编辑

Gumbo感谢您的帮助

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

+0

是之前的边界无限或至多n级深元素的数量。如果你知道只有n个级别,写n个正则表达式可能会简单得多。 – 2010-07-17 12:03:46

+0

是的,它们是无限的 – fampinheiro 2010-07-17 13:35:53

回答

3

尝试下列规则:

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

小心与ñ标志中的第一规则,导致内部重写不增加内部计数器。所以很有可能你有无限递归。


编辑你已经改变了你的问题后:

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

旁注:如果它们位于每个目录('.htaccess')上下文中,则'RewriteRule'测试模式应该会丢失最初的正斜杠。它在我的测试服务器上完美运行,使用问题示例+1 – 2010-07-17 12:34:34

+0

@Tim:感谢您的测试。 – Gumbo 2010-07-17 13:18:21

+0

我编辑了这个问题..你的规则几乎在那里。 – fampinheiro 2010-07-17 13:57:22