0

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

例如:

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

所以要求是我必须将它重定向到具有 /try/this 的 URL,其余的不包括 + 符号。需要注意的一点,加号的个数不是固定的,可以有2到7个,也可以有更多的加号。最好是使用正则表达式的选项会很好,因为all+letters+with+plus文本可以包含从数字到字母的任何内容,但没有符号

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

任何帮助将非常感激。

4

1 回答 1

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。但是,如果您只想在内部重写它而不重定向浏览器,则不需要第二部分,只需第一条规则即可删除它们。

于 2011-11-11T05:55:48.103 回答