我试图通过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还是我只是在代码中遗漏了什么?
提前感谢!
最合适的回答,由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值,但如果需要,也可以重新生成并附加这些值。