2016-11-07 54 views
0

目前,WordPress安装使用URL,例如: http://example.com/test-page重定向与WordPress的mod_rewrite的内部安装

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

我需要使用mod_rewrite使这个去: ​​$ 1 & ID = $ 2(因为测试页本身的查询字符串的一部分)

我曾尝试很多东西,搜索,阅读关于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] 

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

回答

0

因此,显然我很缺乏理解wordpress如何处理重定向。经过一些进一步的研究后,我发现我实际上需要将hooks添加到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'];