2017-08-23 9 views
0

Ich möchte URL Rewrite für eine Webseite verwenden. Ich habe den folgenden Code in functions.phpURL Rewrite Fehler in PHP (404 Fehler)

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

Und diesen Code in single.php, wo ich eine Single- {benutzerdefinierte} .php auf dem Parameter umfassen I erhalten:

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

Damit Code ich möchte die URLS neu zu schreiben, statt Verwendung von Beispiel ../juegos/ddtank/?play=full I ../juegos/ddtank/full/

auch für .../juegos/fishao/?play=jugar ich verwenden möchte .../juegos/fishao/jugar

verwenden möchten

Jedes Mal, wenn ich die URL mit ../jugar/ oder ../full/ lade, habe ich einen Fehler 404.

Und dies ist auf den Permalink Konfiguration in Wordpress: http://www.juegoskids.com /juegos/%postname%/

Können Sie mir helfen, dieses Problem beheben?

+1

Sie können dies in PHP nicht tun. Sie müssen dies auf der Serverebene tun, z. '.htaccess' schreibt Regeln um. Denken Sie daran, dass die meisten [Entwicklungs-Frameworks] (http://codegeekz.com/best-php-frameworks-for-developers/) Unterstützung für diese integrierte Funktion haben. Sie verfügen über eine Routing-Schicht, um URLs bestimmten Aktionen innerhalb Ihres Codes zuzuordnen . Sehen Sie sich Dinge wie [Fat-Free Framework] (https://fatfreeframework.com/) und [Laravel] (http://laravel.com/) an, um zu sehen, ob sie Ihnen helfen können, Ihr Problem einfach zu lösen. – tadman

+1

Ihre Rewrite-Regel ist durcheinander, aber dies kann in WP getan werden, ich weiß nicht, worüber Tadman spricht. Was ist "Juegos"? Ein benutzerdefinierter Beitragstyp? Seite? Oder nur etwas, das dem Permalink vorangestellt ist? – Spartacus

Antwort

0

Ihre Rewrite-Regel macht nicht viel Sinn, da sie "juegos" und% postname% entspricht, aber Sie versuchen auch, beim Rewrite eine Regex-Übereinstimmung zu erstellen. UND, alles, was Sie tun müssen, ist die Abfrage var mit get_query_var(). Keine Notwendigkeit, die URL zu analysieren.

Try this:

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; 
} 

(I verwendet switch/case für Sauberkeit, aber Sie können die if/else-Block verwenden, wenn Sie möchten)

Also, stellen Sie sicher, dass Ihre Permalinks spülen nach dem Hinzufügen oder Ändern einer Rewrite-Regel.