PHP中的URL重写错误(404错误)

时间:2017-08-23 22:07:12

标签: php wordpress

我想在网页上使用网址重写。我在functions.php中有以下代码

function add_query_vars($aVars) {
$aVars[] = "play";
return $aVars;
}

// hook add_query_vars function into query_vars
add_filter('query_vars', 'add_query_vars');


function add_rewrite_rules($aRules) {
$aNewRules = array('^([^/]*)/([^/]*)/?$' => 'index.php?pagename=$([^/]*)/([^/]*)/&play=$matches[1]');
$aRules = $aNewRules + $aRules;
return $aRules;
}

// hook add_rewrite_rules function into rewrite_rules_array
add_filter('rewrite_rules_array', 'add_rewrite_rules');

这个代码在single.php中,我在我收到的参数中包含一个{custom} .php:

$url = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

$parts = parse_url($url);
parse_str($parts['query'], $query);

$parametro = $query['play'];

if ($parametro == 'jugar')
{
    include( get_template_directory() . '/single-play.php');
}
else if ($parametro == 'full')
{
    include( get_template_directory() . '/single-full.php');
}

使用该代码我想重写URL,而不是使用示例../juegos/ddtank/?play=full我想使用../juegos/ddtank/full/

同样适用于.../juegos/fishao/?play=jugar我想使用.../juegos/fishao/jugar

每次使用../jugar/../full/加载网址时,我都会收到404错误。

这是Wordpress中的固定链接配置: http://www.juegoskids.com /juegos/%postname%/

你能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

你的重写规则没有多大意义,因为它匹配" juegos"和%postname%,但是你还试图在重写中进行正则表达式匹配。并且,您需要做的就是使用get_query_var()获取查询var。无需解析网址。

试试这个:

function add_query_vars($aVars) {
    $aVars[] = "play";
    return $aVars;
}

$aNewRules = array('^juegos/([^/]*)/([^/]*)/?$' => 'index.php?pagename=$matches[1]&play=$matches[2]');

$parametro = get_query_var('play');
switch ($parametro) {
    case 'jugar':
        include( get_template_directory() . '/single-play.php');
        break;
    case 'full':
        include( get_template_directory() . '/single-full.php');
        break;
}

(我使用了switch / case来保持清洁,但如果你愿意,可以使用if / else块)

此外,请确保在添加或更改重写规则后刷新固定链接。