Apache重写规则 - 正则表达式帮助

时间:2011-07-26 12:49:38

标签: regex apache mod-rewrite url-rewriting

我有7个网址:

url: /v/3b89441db7986135e5eb9e1debf0cc23
url: /v/3b89441db7986135e5eb9e1debf0cc23/login
url: /v/3b89441db7986135e5eb9e1debf0cc23/logout
url: /v/3b89441db7986135e5eb9e1debf0cc23/access
url: /v/3b89441db7986135e5eb9e1debf0cc23/delete-attendee/:id
url: /v/3b89441db7986135e5eb9e1debf0cc23/edit-attendee/:id
url: /v/3b89441db7986135e5eb9e1debf0cc23/finalise

如何编写重写规则,如果这些URL不匹配,我会将用户重定向到另一个域?

例如/ v /之后的部分始终是32个字符的MD5字符串。 :id部分始终是一个数字。

如果你能给我一个正则表达式(正则表达式从未成为我的强项)

/v/3b89441db7986135e5eb9e1debf0cc23

/v/3b89441db7986135e5eb9e1debf0cc23/edit-attendee/:id

这将是非常好的。

3 个答案:

答案 0 :(得分:4)

此正则表达式与您的网址匹配:

/v/[a-f0-9]{32}(/[a-z-]+(/\d+)?)?

用英语...

  • /v/是字面意思
  • [a-f0-9]{32}表示32位十六进制数字
  • / [A-Z - ] +(/ \ d +)?表示“/”,然后是(任何小写字母或短划线)中的至少一个,然后是“/”,然后是一些数字
  • 围绕(...)?中的正则表达式表示其中一个或者都不是

仅供参考,这个正则表达式与所有相关的网址相匹配

如果你想匹配,请使用:

^(?!/v/[a-f0-9]{32}(/[a-z-]+(/\d+)?)?$)

答案 1 :(得分:1)

这个怎么样:

\/v\/[a-f0-9]{32}(\/(login|logout|access|delete-attendee\/:\d+|edit-attendee\/:\d+|finalise)?

这只会与您接受的网址相匹配。你应该调整你的味道或正则表达式和适当的逃脱字符。

答案 2 :(得分:1)

您说要在网址不匹配时重定向,因此首先您必须制定一个匹配所有有效网址的规则,然后添加!以取消匹配。

RewriteEngine On
RewriteRule !^v/[0-9a-f]{32}(/(login|logout|access|delete-attendee/\d+|edit-attendee/\d+|finalise))?$ http://your-other-domain/ [R]

上述规则应放在您网站根目录中的.htaccess文件中。