我有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
这将是非常好的。
答案 0 :(得分:4)
此正则表达式与您的网址匹配:
/v/[a-f0-9]{32}(/[a-z-]+(/\d+)?)?
用英语...
/v/
是字面意思[a-f0-9]{32}
表示32位十六进制数字(...)?
中的正则表达式表示其中一个或者都不是仅供参考,这个正则表达式与所有相关的网址相匹配
如果你想不匹配,请使用:
^(?!/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
文件中。