Apache重写规则查询具有正则表达式并递归运行

时间:2011-11-11 05:34:37

标签: regex apache mod-rewrite recursion httpserver

我是apache重写规则的新手。 我正在尝试重写网址

例如:

http://www.example.com/try/this/all+letters+with+plus - > http://www.example.com/try/this/allletterswithplus

所以要求是我必须将其重定向到包含/ try / this的URL,其余的不包括+符号。需要注意的一点是,加号的数量不固定,它可以有2到7个或者可能更多加号。优选地,具有正则表达式的选项将是好的,因为所有+字母+带+加文本可以包括从数字到字母但没有符号的任何内容

我尝试了一些组合,但后来进入了递归循环。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用mod_rewrite分两步完成此操作。第一步是从/try/this/之后的任何内容中删除所有“+”,然后第二步是检查请求是否最初具有“+”但当前URI不是。

此规则将继续删除“+”符号,直到没有。但我们只是通过重写引擎传递它。

RewriteRule ^try/this/(.*)\+(.*)$ /try/this/$1$2 [PT]

此规则检查原始请求中是否包含带有“+”的URL,如果是,则检查它们是否全部被删除。如果是这样,请结束所有重写并重定向浏览器:

RewriteCond %{THE_REQUEST} \ /try/this/.*\+.*\ HTTP
RewriteRule ^try/this/([^\+]*)$ /try/this/$1 [R,L]

您提到您想要重定向到没有“+”符号的/ try / this / URL。但是如果你只是想在内部重写它而不是重定向浏览器,那么你不需要第二部分,只需要删除第一部分。

相关问题