当替换字符串不是文件路径而是应该由下一个规则处理的 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,应该由下一个规则处理?
备注:
使用 RewriteRule ^foo/(.*) foo- [R]
,它可以工作,但随后会导致浏览器重定向,并且 浏览器 URL 栏中的 URL 发生变化,我不想要。
我尝试使用 RewriteRule flag [PT]
即使替换字符串不是文件路径也应该可以工作,但它对我不起作用:它不会将 /foo/anything
重定向到第 /foo-anything
.
页
我试过了
RewriteRule ^foo/(.*) index.php?name=foo- [L]
但它只适用于文章,而不适用于 页数 。我想要一个适用于页面和文章的解决方案。
经过一些研究,这似乎不可能。
要么是带有 [R] 重定向标志的 RewriteRule,然后浏览器将执行新请求,那么在这种情况下 target/substitution 可以是任何新的 URL...
... 或者它 不是 重定向 RewriteRule 然后 target/substitution 必须是满足请求的文件。
另见
在 Wordpress 上下文中,(有效的)hack 是 不 使用 .htaccess RewriteRule 而是在 functions.php
中执行此操作:
$_SERVER['REQUEST_URI'] = preg_replace(..., ..., $_SERVER['REQUEST_URI'])
我想要每一个请求
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,应该由下一个规则处理?
备注:
使用
RewriteRule ^foo/(.*) foo- [R]
,它可以工作,但随后会导致浏览器重定向,并且 浏览器 URL 栏中的 URL 发生变化,我不想要。我尝试使用 RewriteRule flag
页[PT]
即使替换字符串不是文件路径也应该可以工作,但它对我不起作用:它不会将/foo/anything
重定向到第/foo-anything
.我试过了
RewriteRule ^foo/(.*) index.php?name=foo- [L]
但它只适用于文章,而不适用于 页数 。我想要一个适用于页面和文章的解决方案。
经过一些研究,这似乎不可能。
要么是带有 [R] 重定向标志的 RewriteRule,然后浏览器将执行新请求,那么在这种情况下 target/substitution 可以是任何新的 URL...
... 或者它 不是 重定向 RewriteRule 然后 target/substitution 必须是满足请求的文件。
另见
在 Wordpress 上下文中,(有效的)hack 是 不 使用 .htaccess RewriteRule 而是在 functions.php
中执行此操作:
$_SERVER['REQUEST_URI'] = preg_replace(..., ..., $_SERVER['REQUEST_URI'])