当替换字符串不是文件路径而是应该由下一个规则处理的 URL 时的 RewriteRule

RewriteRule when the substitution string is not a file path but an URL which should be processed by next rules

我想要每一个请求

example.com/foo/anything

在 Wordpress 处理之前重写为 example.com/foo-anything

我试过这个:

RewriteEngine On
RewriteRule ^foo/(.*)   foo-       # <-- does not work because the subs. string should be a *file path*

# The following is set by Wordpress
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

但它不起作用,因为替换(目标)字符串应该是一个文件路径,而不是另一个 URL。

如何创建这样一个 RewriteRule,其替换字符串不是文件路径,而是 URL,应该由下一个规则处理?

备注:

经过一些研究,这似乎不可能。

要么是带有 [R] 重定向标志的 RewriteRule,然后浏览器将执行新请求,那么在这种情况下 target/substitution 可以是任何新的 URL...

... 或者它 不是 重定向 RewriteRule 然后 target/substitution 必须是满足请求的文件。

另见


在 Wordpress 上下文中,(有效的)hack 是 使用 .htaccess RewriteRule 而是在 functions.php 中执行此操作:

$_SERVER['REQUEST_URI'] = preg_replace(..., ..., $_SERVER['REQUEST_URI'])