【问题标题】:Redirect with mod_rewrite inside a wordpress install在 wordpress 安装中使用 mod_rewrite 重定向
【发布时间】:2016-11-07 23:31:40
【问题描述】:

目前,wordpress 安装使用 url,例如: http://example.com/test-page

它使用 URL 的“测试页”部分来查找要显示的页面。我的问题是我构建了一个自定义应用程序,该应用程序通过 PHP 包含插件加载到 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]

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

【问题讨论】:

    标签: wordpress apache .htaccess mod-rewrite


    【解决方案1】:

    显然我对 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'];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多