正则表达式在 apache RewriteRule 中为 URI 添加前缀并执行 find/replace

Regex to prefix URI in apache RewriteRule and execute a find/replace

我正在尝试为 apache vhost conf 中的所有 URI 添加前缀 "redirect-lang",并将“/”更改为“%”。例如:

http://example.com/category/article/how/to/redirect

将成为:

http://example.com/redirect-lang/category%article%how%to%redirect

为此,我写了以下内容:

RewriteRule (.*)([^\/]+)\/([^\/]+)\/?$ http://%{HTTP_HOST}-
RewriteCond %{REQUEST_URI} ^(?!(.*)(\/?redirect)) [NC]
RewriteRule (.*)$ http://%{HTTP_HOST}/redirect/[=13=] [L]

第一个 RewriteRule 单独使用“%”替换“/”时效果很好,但是当添加 RewriteCond 和第二个 RewriteRule 时,它会进入无限循环.

有人可以帮我解决这个问题吗?

要重写每个带有前缀 /redirect-lang/ 的 URL,请使用此规则作为 第一个规则:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^((?!redirect-lang/).*)$ redirect-lang/ [L,NC]