重写URL参数并强制“漂亮”固定链接

时间:2016-02-07 作者:Ryan Dorn

我试图通过URL参数传递一个变量,并重写+强制“重定向”它。

换句话说,我有:

/dir1/dir2/?my_var=123 
我想:

/dir1/dir2/123/
通过我的函数中的以下代码。php文件,我能够实现:

function setup_filter_rewrites()
{
    add_rewrite_rule(\'dir1/dir2/([^/]*)/?\', \'index.php?pagename=dir1/dir2&my_var=$matches[1]\', \'top\');
}
add_action( \'init\', \'setup_filter_rewrites\' );  

function setup_filter_query_vars( $query_vars )
{
    $query_vars[] = \'my_var\';
    return $query_vars;
}
add_filter( \'query_vars\', \'setup_filter_query_vars\' );
但是,我仍然可以通过/dir1/dir2/访问URL?my\\u var=123。

有没有办法强制“重定向”(不确定这是否是正确的调用方式)URL,使其始终只服务于重写版本?例如,the way/?page\\u id=456强制/我的页面名/启用了永久链接。

我需要通过做什么事情吗。htaccess还是我只是在代码中遗漏了什么?

提前感谢!

1 个回复
最合适的回答,由SO网友:majick 整理而成

您可以通过检查get\\u var查询值以这种方式强制重定向:

add_action(\'init\',\'my_redirect_check\');
function my_redirect_check() {
    if (isset($_GET[\'my_var\'])) {
        if ($_GET[\'my_var\'] != \'\') {
            if ($_SERVER["HTTPS"]) {$location = \'https://\';}
            else {$location = \'http://\';}
            $location .= $_SERVER[\'SERVER_NAME\'];   
            $location .= strtok($_SERVER[\'REQUEST_URI\'],\'?\');
            $location = trailingslashit($location);
            $location .= $_GET[\'my_var\'];
            $location = trailingslashit($location);                          
            wp_redirect($location); exit;
        }
    }
}
注意:这样会丢失任何其他querystring值,但如果需要,也可以重新生成并附加这些值。

相关推荐

Force pretty permalinks?

我正在构建一个插件,该插件将用于单个站点,并依赖于add_rewrite_rule 要工作,需要打开永久链接。打开它们并不困难,因为它只是一个站点,但我担心其中一个管理员可能会在不知道自己在做什么的情况下关闭它,并破坏该站点。如何以编程方式强制保持漂亮的永久链接?