在wordpress安装中使用mod_rewrite重定向

时间:2016-11-07 13:55:28

标签: wordpress apache .htaccess mod-rewrite

目前,wordpress安装使用以下网址: http://example.com/test-page

它使用URL的“测试页面”部分来查找要显示的页面。我的问题是我构建了一个自定义应用程序,通过PHP include插件加载到wordpress中。此应用程序依赖于诸如的URL http://examples.com/test-page/title-of-page/id

我需要使用mod_rewrite来实现: http://example.com/test-page&title= $ 1& id = $ 2(因为测试页本身就是查询字符串的一部分)

我尝试了很多东西,搜索SO,阅读mod_rewrite标志并测试不同的正则表达式解决方案。

以下是我的一次尝试:

RewriteRule ^directory-listing/([^/]+)/([^/]+) /directory-listing&title=$1&id=$2 [L]
RewriteRule ^directory-listing/([^/]+) /directory-listing&title=$1 [L]
RewriteRule ^directory-listing$ /directory-listing [L]

现在整个.htaccess:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

## Custom ##
RewriteRule ^directory-listing/([^/]+)/([^/]+) /directory-listing&title=$1&id=$2 [L]
RewriteRule ^directory-listing/([^/]+) /directory-listing&title=$1 [L]
RewriteRule ^directory-listing$ /directory-listing [L]
## End Custom ##

#RewriteCond %{REQUEST_FILENAME} -f [OR]
#RewriteCond %{REQUEST_FILENAME} -d
#RewriteRule ^ - [L]

RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

我真的被卡住了。我真的需要一些帮助。提前谢谢!

1 个答案:

答案 0 :(得分:0)

显然,我非常缺乏理解wordpress如何处理重定向。经过一些进一步的研究,我发现我实际上需要在functions.php文件中添加钩子,以便让它按照我的预期运行。我将这些添加到文件的底部,并且能够完成我想要做的事情。

function rewrite_tags_for_directory_listings() { 
    add_rewrite_tag('%dir_title%', '([^/]+)');
    add_rewrite_tag('%dir_id%', '([^/]+)');
}
add_action('init', 'rewrite_tags_for_directory_listings', 10, 0);

function rewrite_rule_for_directory_listings() {
    add_rewrite_rule('^directory-listing/([^/]+)/([^/]+)$','index.php?page_id=11794&dir_title=$matches[1]&dir_id=$matches[2]','top');
}
add_action('init', 'rewrite_rule_for_directory_listings', 10, 0);

然后,在我包含的PHP文件中,我得到了这样的变量:

global $wp_query;
$id = $wp_query->query_vars['dir_id'];