2017-08-23 13 views
0

ウェブページにURL書き換えを使用したいと思います。それとURL PHPの書き換えエラー(404エラー)

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

:私は受信パラメータにシングル{カスタム} .PHPを含むの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にこのコードを有しますコードは、私の代わりに例私は.../juegos/fishao/jugar

を使用したい .../juegos/fishao/?play=jugarためまた ../juegos/ddtank/full/

を使用したい../juegos/ddtank/?play=fullによる使用のため、URLを書き換えるようにしたいです

../jugar/または../full/というURLを読み込むたびに、私は404エラーが発生します。

そして、これはWordpressのパーマリンクで構成され: http://www.juegoskids.com /juegos/%postname%/

あなたは私がこの問題を解決するのに役立つだろうか?

+1

これはPHPでは実行できません。サーバーレイヤーでこれを行う必要があります(例: '.htaccess'ルールを書き換えます。ほとんどの[開発フレームワーク](http://codegeekz.com/best-php-frameworks-for-developers/)はこの組み込み関数をサポートしているので、コード内の特定のアクションにURLをマップするルーティングレイヤーがあります。 [Fat-Free Framework](https://fatfreeframework.com/)や[Laravel](http://laravel.com/)のようなものを見て、あなたの問題を簡単に解決できるかどうかを確認してください。 – tadman

+1

あなたの書き換えルールが乱れていますが、これはWPで行うことができます。私は、タッドマンが何を話しているのか分かりません。 "juegos"とは何ですか?カスタム投稿タイプ?ページ?あるいは、permalinkの前に置かれた何か? – Spartacus

答えて

0

"juegos"と%postname%が一致しているため書き換えルールがあまり意味がありませんが、書き換えでも正規表現一致を試行しています。そして、get_query_var()を使ってクエリvarを取得するだけです。 URLを解析する必要はありません。

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

は(私は清潔のためのスイッチ/ケースを使用していますが、あなたがしたい場合のif/elseブロックを使用することができます)、また

を追加した後、あなたのパーマリンクをフラッシュしてください:

これを試してみてくださいまたは書き換えルールを変更します。