2011-11-11 86 views
0

我是新的Apache重写规则。 我试图重写URLApache重写规则查询具有正则表达式并且递归运行

对于前:

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

所以要求我必须把它有重定向到URL/TRY /本,不包括+符号的休息。需要注意的一点是,加号的数量并不固定,它可以有2到7个或者更多的加号。最好用正则表达式的选项将是很好的,因为所有+字母+与+加文本可以包括数字到字母,但没有迹象

我尝试了一些组合任何东西,但随后进入递归循环。

任何帮助将不胜感激。

回答

1

您可以使用mod_rewrite以2个步骤完成此操作。第一步是从/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 /本/ URL不带“+”的招牌。但是,如果您只是想在内部重写而不重定向浏览器,则不需要第二部分,只是第一条规则会将其删除。

+0

嗨乔恩, 这似乎并不奏效。它只删除了最后两个字母的加号。我希望这个递归地去除所有的加号。 http://www.example.com/try/this/all+letters+with+plus - > http://www.example.com/try/this/all+letters+withplus 你说得对,我只是希望它在内部重写而不是将其重定向到不同的URL。 任何暗示。 谢谢。我在这个方向上找到了一些领先的建议。 – JavaBugger

+0

如果您不需要重定向,那么只需使用顶级规则。当我在.htaccess文件中输入'RewriteRule^try/this /(.*)\+((*)$/try/this/$ 1 $ 2 [PT]',并用“example.com/try/this/ a + b + c + d +++++ e ++++ f ++++++ g + h +++++“,我在日志中看到”example.com/try/this/abcdefgh“的请求。 –