目前,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]
我真的被卡住了。我真的需要一些帮助。提前谢谢!
答案 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'];