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



我希望每个请求

example.com/foo/anything

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

我试过了:

RewriteEngine On
RewriteRule ^foo/(.*)   foo-$1       # <-- 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。

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

指出:

  • 使用RewriteRule ^foo/(.*) foo-$1 [R],它可以工作,但它会导致浏览器重定向和浏览器URL栏中的URL更改,这是我不想要的。

  • 我尝试了RewriteRule标志[PT],即使替换字符串不是文件路径,也应该工作,但它不适合我:它不会将/foo/anything重定向到/foo-anything页。

  • 我试着

    RewriteRule ^foo/(.*)   index.php?name=foo-$1  [L]
    

    ,但它只适用于文章,而不适用于页面。我想要一个同时适用于页面和文章的解决方案。

经过一番研究,这似乎是不可能的。

要么是带有[R]重定向标志的rewriterrule,然后浏览器会做一个新的请求,那么在这种情况下,目标/替代可以是任何新的URL…

…或者不是一个重定向rewriterrule,然后目标/替换必须是一个服务于请求的文件。

参见如何使用RewriteRule使$_SERVER['REQUEST_URI']也被修改为PHP?


在Wordpress上下文中,一个(有效的)hack是使用。htaccess重写规则,而是在functions.php:

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

相关内容

  • 没有找到相关文章

最新更新