.htaccess rewrite

时间:2012-10-19 作者:Joe Czucha

我创建了一个名为“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”,现在没事了。再次感谢!

1 个回复
最合适的回答,由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重写的幕后情况,并评估哪些规则是匹配的,以及它们的查询字符串是如何充实的。

结束

相关推荐

HTAccess重写与WordPress规则和SSL冲突

这一条让我很困惑——我有下面的htaccess规则来将ssl重定向到非ssl页面。这很好,但我想从这个规则中排除某些wordpress请求-例如,https://mysite.com/info/. 我尝试了以下方法:#rewrite all ssl pages to non-ssl for everything that doesn\'t have /info/ in the request uri RewriteCond %{HTTPS} on RewriteCond %{REQUE