自从最近几天试图解决这个问题以来,我一直在拔毛:
我想从格式转换我的网址
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。
或者有没有人有任何想法让这种重写工作?非常感谢。