目前,wordpress安装使用的urls如下:http://example.com/test-page
它使用URL的“test- page”部分来查找要显示的页面。我的问题是,我构建了一个自定义应用程序,它通过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]我真的被卡住了。我真的需要一些帮助。提前感谢!
发布于 2016-11-07 23:31:40
显然,我对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'];https://stackoverflow.com/questions/40466948
复制相似问题