屏蔽/重定向文件夹到wordpress上的querystring

时间:2018-09-01 01:46:53

标签: php wordpress apache mod-rewrite

我在Wordpress中只有一个页面,该页面可以查找sql​​服务器并根据查询字符串显示不同的内容。
例如,我使用的URL是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]

有什么想法吗?

谢谢, 布莱恩

1 个答案:

答案 0 :(得分:0)

好的,我知道了。与其在apache重定向中执行此操作,还不如在我的wordpress functions.php文件中添加一些过滤器:

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' );  

此后,我不得不以与页面内略有不同的方式引用querystring变量。我必须更改标准“ $ _GET [“ stem”];“到“ get_query_var('stem',1);”

希望这对其他人有帮助。