2017-01-08 10 views
1

ユーザから提供されたURLを読み込み、それを配列にスライスして結果から異なるページを出力できるシステムを作成したいと思います。PHP/HTACCESSでURLを読む

は私が、私はそのようなことを行うことができますどのようにこの

//Url in borwser is http://example.com/user/frank 
//this is index.php file in examplepage.com 
//folders user and user/frank do not exist 

$url = read_url(); 
//$url[0] = 'example.com'; 
//$url[1] = 'user'; 
//$url[2] = 'frank'; 

if($url[1]=='user' && $url[2]=='frank'){ 
    include_frank_page(): 
}else if($url[1]=='user' && $url[2]=='john'){ 
    include_john_page(): 
}else{ 
    include_user_error_page(): 
} 

用のサンプル擬似コードを作成してみましょうか?私はWordPressがこのようなことをしていることは知っていますが、それを行うコードの一部を見つけることはできません。これは.htaccesファイルとは何か関係がありますか?

説明やチュートリアルへのリンクがあれば、非常に感謝しています。

EDIT: [OK]を、FallbackResource /index.phpは私が必要とする正確に何ですが、502プロキシエラーがあります。

私はこのようになります.htacces持っている:test

echo $_SERVER['REQUEST_URI']; 

FallbackResource /test/index.php 

そしてindex.phpそれらの両方が私のexample.comルートディレクトリに '試験' フォルダにあります。私は明白な理由のために、このフォルダでのみこれをしたいと思います。

私がexample.com/test/aaaと入力すると、結果は '/ test/aaa' - okとなります。

example.com/test/aaa/bbbと入力すると、結果は '/ test/aaa/bbb' - okとなります。

example.com/test/と入力すると、「502プロキシエラー」が表示されます。どうすればそれを避けることができますか?

EDIT 2:また 、私は私のtestフォルダ内のフォルダtest2を作成し、example.com/test/test2を入力 - 502プロキシエラーもありました。

+0

を?あなたは実行可能なアイデアを持っているようですか? – MrWhite

+0

実際、私はまだ何もしていません。私はどこから始めるべきか、その機能を有効にする方法を知らない。私はどのようにGoogleにこれを知っていない!私がここに来た理由 – MateuszC

+0

明確にするために、あなたは '.htacces'を繰り返し参照します - それは'でなければなりません。htaccess'(2 's') – MrWhite

答えて

1

.htaccessにすべての要求を1つのファイルにルーティングする「フロントコントローラ」を実装することができます。 index.php。 (これはWordPressの機能です)。

次に、index.phpでは、URLを調べて適切なコンテンツを読み込みます。 .htaccessで例えば

、:

FallbackResource /index.php 

このルートドキュメントルートにindex.phpて、存在しないファイルに対するすべての要求。 (WordPressはmod_rewriteの実装を使用しています。)

を次に、index.phpにあなたが何かを行うことができます。

あなたは、具体的に立ち往生しているビット
// Actual HTML pages stored in a (hidden) subdirectory called "/pages" 
$pageDir = $_SERVER['DOCUMENT_ROOT'].'/pages'; 
$pages = array (
    '/home' => 'home.php', 
    '/about' => 'about.php', 
    '/contact => 'contact.php', 
); 

// $_SERVER['REQUEST_URI'] contains the URL of the request 
$url = $_SERVER['REQUEST_URI']; 
if (isset($pages[$url])) { 
    include($pageDir.'/'.$pages[$url]); 
} else { 
    // NB: The "error-404.php" page will need to return the appropriate HTTP status 
    include($pageDir.'/error-404.php'); 
} 
+0

ありがとうございます。これはまさに私が望んでいたものです。 私は502のプロキシエラーがあります - 私は私のメインポストの詳細を追加しました。あなたが感謝することができれば、私は感謝することができます。 – MateuszC

+0

これらの特定の要求に対して「502プロキシエラー」が発生している場合は、おそらく他のディレクティブと競合している可能性があります。あなたは '/ test'サブディレクトリを使っています。親/ rootディレクトリに '.htaccess'ファイルがありますか?または、サーバーのconfig/VirtualHostディレクティブ? '.htaccess'ファイルはファイルシステムのパスに沿って継承されます。簡単なテストとして、 '/ test/.htaccess'ファイルの先頭に' RewriteEngine On'を入れることができます。これにより、処理中の親 '.htaccess'内のmod_rewriteディレクティブが(デフォルトで)処理されなくなります。 – MrWhite

+0

いいえ、私は親ディレクトリに.htaccesを持っていません。そして、私が 'RewriteEngine On'を使用したとき、それは助けになりませんでした。 – MateuszC

関連する問題