1

自从最近几天试图解决这个问题以来,我一直在拔毛:

我想从格式转换我的网址

http://example.com/prodsearch/category/tag1-tag2-tag3-tag4

http://example.com/prodsearch/index.php?tag=tag1+tag2+tag3+tag4&cat=category

首先,我在 .htaccess 中添加了以下规则

RewriteRule ^prodsearch/(.*)/(.*)-(.*)$ prodsearch/$1/$2+$3 [L]
RewriteCond %{REQUEST_URI} !^prodsearch/(.*?)/(.*)\-(.*)
RewriteRule ^prodsearch/(.*)/(.*)$ index.php?tag=$2&cat=$1 [R,QSA,L]

这里 rule1 递归地将标签之间的所有 '-' 替换为 '+' 并且 rule2 会在标签之间没有更多的 '-' 时进行实际的重写(由 RewriteCond 检查)

这些规则实际上有效,但问题是它们重定向(通过 url 更改)到新的 url 模式,我不想要显式重定向。从最后一条规则中删除“R”标志后,整个事情停止工作,我开始在我的 wordpress 安装中获得 404 页。

有人可以解释为什么会发生这种情况以及如何在没有明确重定向的情况下做到这一点。

我也尝试将这些规则包含在 wordpress 中,希望当被 wordpress 规则调用时可以在没有重定向的情况下工作。我使用了以下 add_rewrite_rule() 调用:

add_rewrite_rule('prodsearch/(.*)/(.*)-(.*)$','price-list/$1/$2+$3','top');
add_rewrite_rule('prodsearch/(.*)/(.*)$','index.php?tag=$matches[2]&cat=$matches[1]','top');

现在 wordpress 将我的第一个规则检测为外部规则并将其刷新到 .htaccess 文件,这会破坏我的执行顺序,现在首先评估第一个规则 2(作为内部 wordpress 重写规则集的一部分),然后再执行规则 1,因此再次出现 404页。

是否可以告诉 wordpress 不要将我的第一条规则视为外部规则并且不要将其刷新到 .htaccess。

或者有没有人有任何想法让这种重写工作?非常感谢。

4

0 回答 0