我创建了一个名为“event”的自定义帖子类型,并添加了一个名为London 2012的事件。我希望页面具有以下URL结构:
local.mysite.com/london-2012/speakers
我已经创建了一个名为Speakers giving me a working的页面
/speakers
url(我将永久链接设置为“Post name”)。
现在,我创建了一个静态测试站点,并将以下内容添加到。htaccess:
RewriteEngine On
RewriteRule ^([A-Za-z0-9-]+)/speakers?$ /speakers.php [NC,L]
这意味着如果我去
local.testsite.com/something/speakers
它将显示演讲者的内容。php,同时保留原始URL。完美的或者我是这么想的。。。
现在,已经将规则迁移到我的Wordpress安装中(都是通过在.htaccess文件中直接添加规则-在RewriteEngine on
线路-并通过add_rewrite_rule()
功能)我有奇怪的行为。
RewriteRule ^([A-Za-z0-9-]+)/speakers/?$ /speakers?event=%1 [L]
而不是URL保持不变并向我显示
/speakers
, 它实际上是将我重定向到/发言人页面,URL正在更改。
这是WP中页面的默认行为,即使没有对进行任何修改。htaccess文件,因此我只能想象它由于某种原因与我的规则不匹配,然后点击RewriteCond %{REQUEST_FILENAME} !-f
线或者它与之匹配,但尽管[L]
线
无论如何,我认为这涵盖了一切-如果有人有任何想法,我会非常感激,因为我有点疯狂!
Update 1
已排序-谢谢Brian。您的解决方案确实有效,但由于查询变量名为“event”,它变得很混乱,并将我发送给/speakers/作为重定向。我把它改成了“e”,现在没事了。再次感谢!
最合适的回答,由SO网友:Brian Fegter 整理而成
看起来您需要使用查询字符串而不是URI段来处理重写,并通过索引传递查询。php。WordPress似乎不知道你在这里想要实现什么。
尝试以下规则并访问设置->永久链接页面以刷新以前的规则并将其添加到堆栈中。
add_rewrite_rule(
\'^([A-Za-z0-9-]+)/speakers/?$\', //Checked against the global $wp object - $wp->request
\'index.php?page=speakers&event=$matches[1]\', //Use WP_Query params to find your page
\'top\' //This will superceed the default WP rewrite stack
);
确保向WP注册查询变量,以便在中使用它
$wp_query
;
add_filter(\'query_vars\', \'my_query_vars\');
function my_query_vars($vars){
$vars[] = \'event\';
return $vars;
}
然后,您可以访问
event
使用以下命令查询变量:
get_query_var(\'event\');
对于测试,我非常喜欢
Monkeyman Rewrite Analyzer 插件。它允许您查看WordPress重写的幕后情况,并评估哪些规则是匹配的,以及它们的查询字符串是如何充实的。