【问题标题】:masking/redirecting a folder to querystring on wordpress将文件夹屏蔽/重定向到 wordpress 上的查询字符串
【发布时间】:2019-02-07 00:06:00
【问题描述】:

我在 Wordpress 中有一个页面,该页面具有对 sql 服务器的查找并根据查询字符串呈现不同的内容。
比如我使用的网址是https://some-server.com/dynamic-page/?stem=name-of-content-to-be-looked-up

当我访问页面并更改查询字符串时,内容会发生变化。完美。

现在,我不希望查询字符串暴露给最终用户,所以我尝试使用 mod_rewrite,例如:

RewriteRule ^ds/(.*) /dynamic-page/?stem=$1 [PT]

这个想法是最终用户的 URL 看起来像 https://some-server.com/ds/name-of-content-to-be-looked-up

当我使用 301 重定向时,效果很好。当我使用内部重定向时,它是 404 的。最后我尝试了几种不同的标志,但都以 404 失败。

有没有人试过这个并成功地做到了?愿意分享一些想法吗?

我已经尝试了以下,还有更多,没有工作:

RewriteRule ^ds/(.*) /dynamic-page/?stem=$1 [PT]
RewriteRule ^ds/(.*) /dynamic-page/?stem=$1 [L]
RewriteRule ^ds/(.*) /dynamic-page/?stem=$1 [R,L]
RewriteRule ^ds/(.*) /dynamic-page?stem=$1 [QSA,NS,L]

RewriteCond %{REQUEST_URI} ^/ds/
RewriteRule ^ds/(.*) /index.php/dynamic-page?stem=$1 [PT]

有什么想法吗?

谢谢, 布赖恩

【问题讨论】:

    标签: php wordpress apache mod-rewrite


    【解决方案1】:

    好的,我想通了。我可以在我的 wordpress functions.php 文件中添加一些过滤器,而不是在 apache 重定向中执行此操作:

    function setup_filter_query_vars($query_vars)
    {
        $query_vars[] = 'stem';
        return $query_vars;
    }
    add_filter( 'query_vars', 'setup_filter_query_vars' );
    
    
    function setup_filter_rewrites()
    {
        add_rewrite_rule('ds/([^/]*)/?', 'index.php?stem=$matches[1]&pagename=dynamic-page&', 'top');
    }
    add_action( 'init', 'setup_filter_rewrites' );  
    

    之后,我不得不以与页面内略有不同的方式引用查询字符串变量。我不得不改变标准的“$_GET[”stem”];”到 "get_query_var('stem', 1 );"

    我希望这对其他人有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多